
ALSong ASL 파일 파싱 Heap Overflow 취약점 분석
ASL 파일 파싱 중 delimiter 처리 함수가 `-1`을 반환하고, 이 값이 검증 없이 `memcpy` 크기 계산에 사용되어 heap 영역으로 비정상 복사가 발생한 사례입니다.
개요
ALSong v3.53에서 .asl 음악 파일을 파싱할 때 heap overflow로 이어질 수 있는 입력값 검증 누락 취약점을 확인했다.
취약점은 ALSongCommon.dll 의 CASLFile::Read 함수 내부에서 발생한다. 파일을 "," 기준으로 분리하거나 특정 구간 길이를 계산하는 함수가 조건에 따라 -1 을 반환하는데, 이 반환값을 충분히 검증하지 않고 buffer allocation과 memcpy 크기 계산에 사용한다.
결과적으로 작은 heap buffer가 만들어진 뒤, memcpy 가 비정상적으로 큰 크기의 복사를 시도하면서 heap 영역을 넘어 접근한다.
KISA 취약점 제보 포털에는 다음 기록으로 제보했다.
KISA 제보 링크: https://knvd.krcert.or.kr/report/records/detail?id=68859bae7614ed0001f00e83
제조사: 이스트소프트
소프트웨어: 알송
버전: v3.53
취약 파일: ALSongCommon.dll
취약 함수: ALSongCommon!CASLFile::Read+0x107
공격 유형: 버퍼 오버플로우
영향: 서비스 거부
발생 환경
Software : ALSong v3.53 Module : ALSongCommon.dll OS : Windows 11 Home 24H2 OS Build : 26100.4652 Architecture : 64-bit OS, x64-based processor Experience : Windows Feature Experience Pack 1000.26100.128.0 PoC : sample.asl
취약점은 화이트햇 스쿨 2단계 팀 프로젝트 중, WinAFL 기반 퍼징을 약 24시간 수행하며 발견했다. 이후 생성된 크래시 샘플을 WinDbg와 디스어셈블리 기준으로 분석했다.
ASL 샘플 특징
첨부한 PoC는 크기가 155바이트인 작은 ASL 파일이다.
00000000: 3c 41 4c 53 4f 4e 47 5f 50 4c 3e 20 3c 56 45 52 00000010: 53 49 4f 4e 3d 31 2e 33 3e 0d 0a 3c 41 4c 53 4f 00000020: 4e 47 5f 49 4e 46 3e 31 30 35 ac 0d 0a 31 7c 30
문자열 기준으로는 다음과 같은 구조가 보인다.
<ALSONGPL> <VERSION=1.3> <ALSONGINF>105 10011C...
샘플 내부의 구분자와 길이 정보가 파서의 특정 분기를 타게 만들고, 그 과정에서 하위 함수가 -1 을 반환한다.
크래시
크래시 지점은 stack overflow 케이스와 마찬가지로 MSVCR90!memcpy+0x5a 내부다.
댓글