· kaynak dev.to (home feed)
Yapay zekâ ile yazılmış fuzzer, FFmpeg'in VPK demuxer'ında 21 baytlık bir sıfıra bölme çöküşü buldu
21 baytlık hazırlanmış bir VPK ses dosyası, FFmpeg'in Sony VPK demuxer'ında sıfıra bölmeye yol açarak, dosyayı custom I/O üzerinden işleyen uygulamaları çökertiyor. Hata, yaklaşık 495.000 çalıştırmadan sonra yapay zekâ destekli bir fuzzer sayesinde ortaya çıktı.

21 baytlık bir servis dışı bırakma
Bir güvenlik araştırmacısı, az bilinen bir Sony ses formatının demuxer'ında meydana gelen sıfıra bölme yoluyla FFmpeg tabanlı uygulamaları çökerten 21 baytlık bir girdi bildirdi. FFmpeg takipçisinde #24290 numarasıyla kaydedilen bu hata, Darío Clavijo tarafından büyük ölçüde yapay zekâ yardımıyla oluşturduğu bir fuzzer kullanılarak bulundu ve hikâye, jamilxt'in detaylı bir dev.to yazısıyla belgelendi.
Hata, libavformat/vpk.c dosyasında, neredeyse kimsenin karşılaşmadığı bir container formatı olan Sony PS2 VPK ses dosyalarının demuxer'ında yer alıyor. Bu az bilinirlik, hatanın neden hâlâ var olduğunun merkezinde. Takip kaydına göre çöküş zinciri şöyle işliyor:
- FFmpeg'in format algılaması VPK magic byte'larıyla eşleşir ve VPK demuxer'ını atar.
- vpk_read_header 24 baytlık bir başlığı ayrıştırır. Hazırlanmış girdi, kanal sayısını (nb_channels) 14 ile 17 arasındaki baytlarda sıfıra ayarlar. Başlık kodu bu sayının pozitif olup olmadığını gerçekten doğruluyor, ancak fuzzer'ın custom I/O kurulumunda algılama sırasında görülen veri ile packet okuma sırasında görülen veri birbirinden sapabiliyor.
- vpk_read_packet son ses bloğunu işlediğinde nb_channels yeniden sıfırdır ve 89. satırdaki bu değere bölme işlemi bir SIGFPE yükselterek işlemi sonlandırır.
Konunun çöküş meta verileri: Bulmak için 495.211 çalıştırma, 13.188 girdilik bir corpus ve tek bir makinede 10 saat 43 dakika. Girdi tamamen deterministik ve ağ bağlantısı gerektirmiyor. Önem derecesi Orta olarak belirlenmiş — güvenilir bir servis dışı bırakma, bellek bozulması veya kod çalıştırma değil.
Test aracı yapay zekâ yardımıyla yazıldı
Clavijo, sonucu Hacker News'te "We found a division by zero bug in FFmpeg with a vibecoded fuzzer" başlığıyla duyurdu ve bu başlık 250 puanı aştı. Dev.to yazısına göre, izleyen tartışmanın büyük kısmı yapay zekâ ile yazılmış test araçlarının hata avcılığının ekonomisini nasıl etkilediği üzerine yoğunlaştı.
GitHub'da fuzzer-tool adıyla yayınlanan araç; 9 kategoriye yayılmış 147 mutasyon operatörü, Elo puanı ile yönetilen 14 zamanlayıcı modülü, AFL tarzı forkserver çalıştırması, paylaşımlı bellek edge coverage'ı ve bireysel çağrı noktalarına kadar inen karşılaştırma izleme özelliğine sahip coverage-guided bir binary fuzzer olarak tanımlanıyor. README'si sınırları konusunda açık sözlü: ham verimlilik AFL ailesinin gerisinde kalıyor ve büyük ölçekli üretim fuzzing'i için AFL öneriliyor.
Bu tek seferlik bir olay da değildi. Aynı repo, HIGH dereceli ikinci bir FFmpeg bulgusunu daha kaydediyor: altyazı çözücü yolu üzerinden libavcodec/decode.c içindeki bir av_assert0(0)'a ulaşan 46 baytlık bir girdi. İkisi de, Google'ın OSS-Fuzz'unun yıllardır durmaksızın denediği bir kütüphanede bir haftalık fuzzing içinde ortaya çıktı — custom bir I/O yolu üzerinden ulaşılan az bilinen bir demuxer, tam da genel amaçlı harness'lerin gözden kaçırma eğiliminde olduğu bölge.
Düzeltme iki satır
Önerilen yama, vpk_read_packet'ın başında nb_channels <= 0 koşulunu kontrol edip AVERROR_INVALIDDATA döndürüyor ve yanına bir regresyon testi eklenmiş. İnsanı iç burkan detay şu: Bu bölme işlemi için neredeyse aynı bir koruma, Kasım 2024'te ffmpeg-devel e-posta listesinde önerilmişti, ancak dev.to anlatımına göre asıl gereken yola hiç ulaşamadı. Hata sınıfı biliniyordu; düzeltme sadece gelmedi.
Yeniden üretim I/O yoluna bağlı
Dev.to yazarı, çöküşü Ubuntu üzerinde FFmpeg 6.1.1 ile, konudaki hex dump'taki 21 baytı komut satırından vererek yeniden üretmeye çalıştı. Çökmedi. FFmpeg VPK container'ını doğru şekilde algıladı, 942.683.702 Hz örnekleme hızı ve 80 kanala sahip absürt bir ses akışı bildirdi, ADPCM çözücüsünü açamadı ve bir demuxing hatasıyla düzgün şekilde sonlandı.
Bu bir çelişki değil ve hikâyenin en öğretici kısmı da zaten bu. Tetikleyici, algılama zamanı ile packet okuma zamanındaki verinin birbirinden sapmasını gerektiriyor; bu da fuzzer'ın bellek içi custom AVIO yolu altında gerçekleşiyor. CLI'nin disk tabanlı I/O'su ise tutarlı bir anlık görüntü okuyor. Başarısız yeniden üretim denemesi, kök nedenin kendisi için kanıt oluşturuyor: Ayrıştırılan kanal sayısı, verinin hangi görünümünün kazandığına bağlı. Pratik sonuç, maruziyetin uygulamaya göre değişmesi. Güvenilmeyen baytları custom I/O callback'leri üzerinden FFmpeg'e aktaran yazılımlar risk grubunda; düz bir CLI çağrısı değil. Güvenli yolda bile, bir çözümleyicinin 21 bayttan 942 MHz örnekleme hızı ve 80 kanal rapor etmesi, tek başına bozuk girdi toleransı hakkında bazı şeyler söylüyor.
Neden önemli
FFmpeg; transcoder'lara, thumbnail üreteçlerine, medya sunucularına ve rutin olarak güvenilmeyen yüklemeleri işleyen sohbet uygulamalarına gömülü durumda. Deterministik bir 21 baytlık çöküş, koşulların geçerli olduğu her yerde düşük maliyetle yerleştirilebilir ve medya boru hatları demuxer girdisini nadiren düşmanca olarak ele alıyor.
Daha derin sinyal ekonomik. Tek bir araştırmacı, tek bir makine ve yaklaşık on bir saat; mevcut en çok fuzz'lanan C kod tabanlarından birinde, büyük ölçüde yapay zekâ tarafından yazılmış bir test aracı kullanarak iki gerçek çöküş ortaya çıkardı. Dev.to yazarı, belirleyici unsurun üretilen kod değil, insanın dayattığı disiplin olduğunu savunuyor: agent'lar için convention dosyaları, backtrace içeren şablonlaştırılmış çöküş raporları ve bir DoS aracını bellek bozulmasından dürüstçe ayıran önem derecesi değerlendirmeleri. Kasım 2024 tarihli e-posta listesi başlığı ise dersin diğer yarısını sunuyor: Bir hatayı tespit etmek, hatta düzeltmesini önermek bile, yama gerçekten uygulanana kadar hiçbir şey ifade etmiyor.
- #ffmpeg
- #security
- #fuzzing
- #open-source
- #ai
İlgili yazılar
- FineTune Studio, Qwen3-1.7B'yı yaklaşık 3,2 GB VRAM ile QLoRA üzerinden fine-tune ediyor
- MCP tarayıcısının path-traversal kuralı, 9.1 puanlı bir RCE dahil 2026'daki tüm yazma tarafı MCP CVE'lerini kaçırdı
- Eski LinkedIn SRE'si, yapay zekâ ile olay yönetiminin mühendislerin sistem bilgisünü aşındırdığı konusunda uyarıyor