피드로 돌아가기
The RegisterSecurity
원문 읽기
29년 된 Heap Overread 취약점 Squidbleed 발견 및 해결
Mythos discovers 'Squidbleed,' a memory leak that's gone undetected since Clinton era
AI 요약
Context
Squid 캐싱 프록시 서버 내 NetWare 서버 호환성을 위해 1997년 도입된 FTP 디렉토리 리스팅 파서의 로직 결함. 특정 조건에서 버퍼 범위를 벗어나 내부 메모리를 읽어내는 Heap Overread 발생으로 인한 사용자 평문 HTTP 요청 및 세션 토큰 유출 위험 존재.
Technical Solution
- FTP 디렉토리 리스팅 파싱 시 공백 제거를 위해 사용된
while (strchr(w_space, *copyFrom)) ++copyFrom;루프의 경계 검사 부재 확인 - 공격자 제어 FTP 서버가 타임스탬프 이후 파일명을 제공하지 않을 때
copyFrom포인터가 NULL 종료 문자에 도달하는 상황 분석 strchr함수가 NULL 문자를 검색 대상으로 처리하여 루프가 멈추지 않고 버퍼 끝단 너머의 메모리 영역을 계속 참조하는 메커니즘 파악xstrdup함수가 버퍼 경계를 넘어선 메모리 데이터를 파일명으로 인식하여 공격자에게 전송하는 데이터 유출 경로 식별strchr호출 전 NULL 종료 문자를 명시적으로 확인하는 조건문을 추가하여 비정상적인 메모리 참조를 원천 차단하는 패치 적용
실천 포인트
- 레거시 호환성을 위해 추가된 특수 처리 로직의 경계 조건 검증 여부 재검토 - 사용하지 않는 프로토콜(예: FTP)의 기능을 비활성화하여 Attack Surface 최소화 - C/C++ 기반 파서 설계 시 포인터 연산과 NULL 종료 문자 처리의 안정성 확보