27
Feb
Zephyr RTOS: cbvprintf_package %.*s 포맷 사용 시 OOB 읽기 버그 분석
문제 요약 cbvprintf_package()에서 %.*s 포맷 사용 시 precision specifier를 무시하고 strlen()을 호출. null-terminated가 아닌 문자열에서 힙 버퍼 오버플로(out-of-bounds read) 발생. 원본 이슈: zephyrproject-rtos/zephyr#93999 원인 분석 lib/os/cbprintf_packaged.c의 포맷 문자열 파싱에서 '.'과 '*'를 별도로 처리하지만, '*'로 소비한 precision 정수 값을 저장하지 않음. 이후 's' 처리 시 precision 정보 없이 strlen(s)를 호출하여 할당된 버퍼를 넘어서 읽음. 영향받는 코드: Sizing pass (L676): len += strlen(s) + 1 + 1; Copy pass (L792): size = strlen(s) + 1; 재현 macOS + Apple Clang + AddressSanitizer로 핵심 동작을 독립 재현: ...