🧭 요약

항목내용
취약점 IDCVE-2022-24434
영향 범위dicerbusboymulter 간접 영향
위험 수준High (DoS - 서비스 거부)
해결 버전multer@1.4.4-lts.1
릴리스 일자2022년 5월 29일
Node.js 최소 버전≥ 6.0.0
대응 요약busboy 의존성 업데이트를 통해 dicer 취약점 우회 또는 제거

🧨 취약점 개요

  • 공격 방법: multipart/form-data 요청의 헤더를 공백/탭 문자로 조작 시 서버 충돌 유발
  • 문제 위치: HeaderParser.prototype._parseHeader() (Dicer 내부)
  • 공식 보고일: 2022년 5월 20일 (NVD 링크)
Express → Multer → Busboy → Dicer (취약점 위치)

🔧 패치 세부 내용

✅ Multer 1.4.4-lts.1

  • busboy 1.6.0 이상 사용 → dicer 우회
  • NestJS에서도 채택됨 (PR #9686)

⚠️ dicer는 공식 패치 없음

  • PR 존재: #22
  • 하지만 병합 및 릴리스 X → 여전히 취약

📦 의존성 체인 분석

패키지취약 여부패치 제공 여부비고
Multer간접 영향✅ 1.4.4-lts.1busboy 의존성 업그레이드 포함
Busboy간접 영향✅ 1.6.0 이상dicer 제거 또는 우회 추정
Dicer직접 영향❌ 없음PR만 존재, 미병합

🛠 대응 가이드

1️⃣ Node.js 업그레이드

  • 최소: v6.0.0 이상
  • 권장: v14 이상

2️⃣ Multer 업그레이드

npm install multer@1.4.4-lts.1

또는 package.json:

"dependencies": {
  "multer": "^1.4.4-lts.1"
}

3️⃣ npm overrides (npm ≥ 8.3.0)

"overrides": {
  "multer": "^1.4.4-lts.1"
}

4️⃣ 패치 직접 적용 (정식 패치 없을 경우)

patch-package로 dicer 임시 패치

npm install patch-package --save-dev

package.json:

"scripts": {
  "postinstall": "patch-package"
}

dicer 내부 수정 (node_modules/dicer/lib/Dicer.js):

@@ -124,7 +124,11 @@
   this._bparser.on('info', function(isMatch, data, start, end) {
-    self._oninfo(isMatch, data, start, end);
+    try {
+      self._oninfo(isMatch, data, start, end);
+    } catch (e) {
+      self.emit('error', e);
+    }
   });
npx patch-package dicer

⚠️ 이 방식은 정식 패치가 아니며, dicer 버전 변경 시 재작성 필요


🔍 장기 고려사항

  • dicer는 유지보수 상태가 좋지 않음
  • @fastify/busboy 또는 fastify-multipart 등 대체 구조 고려 필요

📚 참고 자료


✅ 결론

  • Multer@1.4.4-lts.1은 CVE-2022-24434에 대한 간접 대응 버전
  • Node.js 6 이상 환경에서는 업그레이드만으로 안전하게 대응 가능
  • 장기적으로는 구조적 대체 또는 의존성 제거 전략이 필요