]> granicus.if.org Git - taglib/commitdiff
Fixed OOB read when loading invalid ogg flac file. (#868) (#869)
authorScott Gayou <github.scott@gmail.com>
Tue, 9 Oct 2018 23:46:55 +0000 (18:46 -0500)
committerStephen F. Booth <me@sbooth.org>
Tue, 9 Oct 2018 23:46:55 +0000 (18:46 -0500)
CVE-2018-11439 is caused by a failure to check the minimum length
of a ogg flac header. This header is detailed in full at:
https://xiph.org/flac/ogg_mapping.html. Added more strict checking
for entire header.

taglib/ogg/flac/oggflacfile.cpp

index 53d04508a31d437bb29ee86d898137400c64d1c4..07ea9dccc8bb628c5cb9bdd804b159ed7ba121d1 100644 (file)
@@ -231,11 +231,21 @@ void Ogg::FLAC::File::scan()
 
   if(!metadataHeader.startsWith("fLaC"))  {
     // FLAC 1.1.2+
+    // See https://xiph.org/flac/ogg_mapping.html for the header specification.
+    if(metadataHeader.size() < 13)
+      return;
+
+    if(metadataHeader[0] != 0x7f)
+      return;
+
     if(metadataHeader.mid(1, 4) != "FLAC")
       return;
 
-    if(metadataHeader[5] != 1)
-      return; // not version 1
+    if(metadataHeader[5] != 1 && metadataHeader[6] != 0)
+      return; // not version 1.0
+
+    if(metadataHeader.mid(9, 4) != "fLaC")
+      return;
 
     metadataHeader = metadataHeader.mid(13);
   }