Eine Sicherheitslücke in Clam AntiVirus hat zur Folge, dass ein entfernter Angreifer Denial-of-Service-Attacken durchführen kann. Die Originalmeldung demonstriert diese Schwachstelle anhand der Prüfung eines Debian-Pakets:
clamscan --max-recursion=5 iceweasel_7.0.1-2_amd64.deb *** glibc detected *** clamscan: double free or corruption (out): 0x0000000002191fd0 *** ======= Backtrace: ========= /lib/x86_64-linux-gnu/libc.so.6(+0x72606)[0x7f370d743606] /lib/x86_64-linux-gnu/libc.so.6(cfree+0x6c)[0x7f370d74833c] /usr/lib/libclamav.so.6(html_tag_arg_free+0x25)[0x7f370dd62b15] /usr/lib/libclamav.so.6(+0xf2862)[0x7f370dd63862] /usr/lib/libclamav.so.6(html_normalise_map+0x23)[0x7f370dd66763] [...]
Die hier verwendete Max-Recursion-Option setzt die maximale Rekursionsstufe beim Verarbeiten von Archiven. Sie wurde eingeführt um vor Denial-of-Service-Attacken zu schützen. Der gezeigte Absturz entsteht durch einen doppelten “free()”-Aufruf auf den “ctx.fmap”-Zeiger in “scanners.c.” Ctx ist dabei eine Variable vom Typ “struct cli_ctx” und Fmap ein “mmap”-artiger Eintrag, der die spezielle “fmap()”- statt der gewöhnlichen “mmap()”-Funktion verwendet.
Die verantwortlichen Programmierfehler befinden sich in den “libclamav/bytecode.c”- und “libclamav/bytecode_api.c”-Dateien, die für das Verarbeiten von Bytecodes zuständig sind. Bei diesen Bytecodes handelt es sich um eine Art Programmiersprache um komplexere Signaturen darzustellen. Wie sich herausstellte entsteht die Schwachstelle genau durch zwei Bytecodes, die im Zusammenhang mit einer maximalen Rekursionsstufe zu dem Absturz führen. Als erste Vorsichtsmaßnahme wurden daraufhin diese beiden Bytecodes aus der entsprechenden Bytecode.cvd Datei entfernt. Die genaue Ursache des Problems liegt darin, dass für Fmap ein Array mit “maxreclevel + 2” Zeigern alloziert wird. Der Code kann aber unter Umständen über das Ende dieses Bereichs hinausschreiben, was dann zu dem Problem führt. Eine Attacke ist mit Hilfe einer geschickt konstruierten Datei möglich, die der Angreifer dem Clam AntiVirus Anwender unterschieben muss.
Betroffen sind die Versionen vor 0.97.3.

