🇰🇷 한글 설명
@fastify/accepts-serializer에서 요청의 Accept 헤더를 기반으로 캐시된 직렬화 선택 결과를 크기 제한이나 제거 정책 없이 저장합니다. 원격 공격자가 다양한 Accept 헤더 변형을 전송하여 캐시를 무제한 증가시키고 Node.js 힙을 고갈시켜 프로세스를 중단시킬 수 있습니다.
💡 쉬운 설명
fastify 라이브러리의 캐시 기능이 공격자의 다양한 요청으로 인해 메모리를 계속 차지하다가 서버가 멈추는 문제입니다. 버전 6.0.4 이상으로 업데이트하면 캐시 크기를 100개로 제한하여 해결됩니다.
🇺🇸 원문 (English)
@fastify/accepts-serializer cached serializer-selection results keyed by the request Accept header without a size limit or eviction policy. A remote unauthenticated client could send many distinct but matching Accept header variants to make the cache grow unbounded, eventually exhausting the Node.js heap and crashing the process. Versions <= 6.0.3 are affected. Update to 6.0.4 or later, which bounds the cache via an LRU with a default size of 100 entries, configurable through the new cacheSize plugin option.
📍 영향받는 시스템
@fastify/accepts-serializer 버전 6.0.3 이하
⚔️ 공격 벡터
원격 비인증 클라이언트가 다양한 Accept 헤더 변형을 반복 전송하여 캐시 메모리 고갈
🛡️ 대응 방법
@fastify/accepts-serializer를 6.0.4 이상으로 업그레이드 또는 cacheSize 플러그인 옵션으로 캐시 크기 설정
🔧 검증 코드
출력에서 @fastify/accepts-serializer 버전이 6.0.4 이상이면 안전, 6.0.3 이하면 업그레이드 필요
npm list @fastify/accepts-serializer 2>/dev/null | grep -E '@fastify/accepts-serializer|─'