최근 AI 기반의 퍼저(fuzzer) 도구인 '바이브코딩(VibeCoding)'이 오픈소스 미디어 처리 라이브러리 FFmpeg의 심각한 버그를 발견했습니다. 이 버그는 Sony PS2 VPK 디먹서(demuxer)에서 21바이트의 아주 작은 악성 입력만으로도 '0 나누기(division by zero)' 오류를 발생시켜 FFmpeg를 사용하는 애플리케이션을 강제 종료시킬 수 있습니다. 이는 신뢰할 수 없는 VPK 파일이나 스트림을 처리할 때 서비스 거부(DoS) 공격으로 이어질 수 있는 문제입니다.
해당 버그는 FFmpeg의 `vpk_read_packet` 함수가 마지막 오디오 블록의 크기(size)와 건너뛸 바이트(skip)를 계산할 때 채널 수(`par->ch_layout.nb_channels`)가 0인지 제대로 검사하지 않아 발생합니다. `vpk_read_header` 함수에 채널 수 검증 로직이 있지만, 퍼저의 사용자 정의 AVIO 경로에서는 프로브(probe) 및 헤더 데이터와 실제 패킷 데이터가 달라져 검사를 우회할 수 있었습니다. 바이브코딩 퍼저는 495,211회 실행, 10시간 43분 만에 이 결함을 찾아냈으며, 충돌은 결정론적이지만 메모리 손상이나 임의 코드 실행으로 이어지지는 않아 '중간(Medium)' 등급의 서비스 거부 문제로 평가되었습니다.
이번 발견은 AI 기반 퍼징 기술의 잠재력을 다시 한번 입증하는 사례입니다. FFmpeg와 같이 복잡하고 널리 사용되는 오픈소스 프로젝트에서 사람이 놓치기 쉬운 취약점을 AI가 효과적으로 찾아낼 수 있음을 보여줍니다. 이러한 버그는 비록 직접적인 코드 실행으로 이어지지는 않더라도, FFmpeg를 기반으로 하는 수많은 미디어 플레이어, 변환 도구, 스트리밍 서비스 등에서 예기치 않은 오류와 서비스 중단을 야기할 수 있어 중요합니다. 개발자들은 `vpk_read_packet` 함수 진입 시 채널 수를 다시 검사하여 `AVERROR_INVALIDDATA`를 반환하도록 수정하고, 회귀 테스트를 통해 이 문제를 해결할 수 있습니다.