Trucha Bug
Der Trucha Bug (auch als Signing Bug oder strncmp Bug bekannt) war ein Fehler in früheren IOS auf der Nintendo Wii, welcher es erlaubte, die digitale Signatur von Software so zu fälschen, dass es so aussieht, als käme diese offiziell direkt von Nintendo. Der Bug wurde zum ersten Mal im Februar 2008 mit dem Wii-Systemmenü 3.2 im neuen IOS37 behoben und dann im 23. Oktober Update in allen IOS.
Erklärung
Zuerst entschlüsselt IOS bei der Installation eines Titels die Signatur und vergleicht die SHA1 des Payloads - der erste Fehler hierbei ist, dass der Payload-Hash ein binärer SHA1-Hash ist und kein ASCII-String und deshalb ein NULL-Byte ("\0") enthalten kann. Der weitaus größere Fehler ist, dass zum Vergleichen der Hashes die C-Funktion strncmp benutzt wird, welche Strings vergleicht und beim ersten NULL-Byte stoppt:
„This function starts comparing the first character of each string. If they are equal to each other, it continues with the following pairs until the characters differ, until a terminating null-character is reached, or until num characters match in both strings, whichever happens first.“
Fakesigning
Das heißt, wenn strncmp auf ein NULL-Byte trifft, vergleicht es nicht mehr weiter, selbst wenn mehr Daten hinter dem NULL-Byte existieren. Hier kann einfach auf Bruteforcing zurückgegriffen werden: Einige Bytes der Daten werden geändert, bis der SHA-1-Hash mit 00 anfängt - die strncmp-Funktion bricht ab und die Signatur ist valide.
IOS16
Das IOS16 (0000000100000010) war ursprünglich auf der Wii Backup Disc vorhanden und wurde von jemanden, in dessen Wii eine solche Disc vergessen wurde, unerlaubt veröffentlicht. Als Nintendo den Trucha Bug in jedem IOS gefixt hat, haben sie nicht daran gedacht, den Trucha Bug auch im IOS16 zu beheben, da dieses ja nie veröffentlicht werden sollte.
Nach diesem Update war das IOS16 das letzte IOS mit dem Trucha Bug und wurde unerlaubt genutzt, um andere IOS und das Systemmenü auf eine Version ohne den gefixten Trucha Bug zu downgraden, um Raubkopien abzuspielen.