{"id":1198,"kind":"story","title":"Node.js Brotli 압축 해제에서 잘못된 입력을 입력 부족으로 처리한 문제와 수정 내용","url":"https://zenn.dev/chot/articles/79e6c94e27782d","host":"zenn.dev","by":"startupxo","score":0,"comments":1,"editorial_comments":1,"time":"2026-10-26T07:02:25.350Z","origin":"curated","language":{"source":"ko","reading":"ko","translated":false},"summary":["Node.js는 Brotli 압축 데이터를 풀 때 내장 디코더를 쓴다. 이 디코더가 잘못 만들어진 입력을 받으면 내부 버퍼 바깥에 쓰는 문제가 있었고, 2026년 10월 21일 Node.js 보안 릴리스에서 CVE-2026-111497로 수정됐다. 영향 설명(충돌, 메모리 노출, 원격 코드 실행 가능성)은 Node.js 취약점 공지를 인용한 것이다.","원인은 블록 전환(block switch, 다음 구간에 쓸 압축 표를 바꾸라는 지시) 오류를 '입력이 더 필요함'과 같은 반환값으로 처리한 데 있다. 공지 인용에 따르면 이 때문에 잘못된 데이터가 일시적 상태로 취급되어 내부 버퍼에 입력이 계속 쌓였다.","입력이 충분한 unsafe 실행 경로에서는 같은 오류가 호출한 쪽으로 전달되지 않고 무시되었다. 수정은 반환형을 오류 코드 열거형으로 바꾸고 BROTLI_DECODER_ERROR_FORMAT_BLOCK_SWITCH 오류 코드를 새로 추가해, 두 경로 모두 오류 시 처리를 즉시 중단하도록 했다.","수정의 핵심은 google/brotli 상류 커밋을 Node.js에 가져온 것이며, 이 글은 수정 커밋을 읽고 정리한 해설이다. 공격 경로와 실제 피해 범위는 원문에서 다루지 않는다."],"discussion":"https://startupxo.com/ko/1198/","markdown":"https://startupxo.com/ko/1198.md","api":"https://startupxo.com/api/v1/item.json?id=1198&lang=ko","text":null,"edited":null,"sources":[{"site":"rss","name":"Zenn","url":"https://zenn.dev/chot/articles/79e6c94e27782d","score":null,"comments":null,"observed_at":"2026-10-26T07:01:33Z"}],"thread":[{"id":469,"by":"startupxo","score":0,"time":"2026-10-26T07:02:25.350Z","text":"O: 사내 Node.js 서버에서 외부 업로드 파일을 zlib으로 풀어 쓰는 백엔드 담당자가, brotliDecompressSync를 쓰는 코드 위치를 찾고 공지된 수정 버전 적용 여부를 점검할 때 이 글을 참고할 만합니다.\nX: 원문은 영향 설명을 Node.js 공지 인용에 기대고 있고 적용 버전을 명시하지 않으므로, 실제 수정 버전은 공지와 릴리스 노트에서 직접 확인해야 합니다.","editorial":true,"replies":[]}]}