🧭 요약
항목 | 내용 |
---|---|
취약점 ID | CVE-2022-24434 |
영향 범위 | dicer → busboy → multer 간접 영향 |
위험 수준 | 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.1 | busboy 의존성 업그레이드 포함 |
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
등 대체 구조 고려 필요
📚 참고 자료
- 🔒 CVE-2022-24434 (NVD)
- 📦 Multer GitHub Releases
- 🛠 Dicer PR #22
- ✅ NestJS PR #9686
- 🧪 Snyk Report for Multer
- 🗂 Stack Overflow 사례
✅ 결론
Multer@1.4.4-lts.1
은 CVE-2022-24434에 대한 간접 대응 버전- Node.js 6 이상 환경에서는 업그레이드만으로 안전하게 대응 가능
- 장기적으로는 구조적 대체 또는 의존성 제거 전략이 필요