
TL;DR#
Neue Erkenntnisse zum Toxic Frame Bug: Durch systematische Tests und adaptive Suchalgorithmen haben wir die einfachsten toxischen Muster identifiziert, die den Hardware-Bug auf der Netgate SG-2100 auslösen. Statt 794 Bytes benötigen wir nur noch 120-121 Bytes einzelner, wiederholter Bytes – spezifisch die Byte-Werte 0x4a (74) und 0xb5 (181). Dies zeigt, dass der Bug byte-wertspezifisch ist, nicht nur längenabhängig. Das ursprüngliche 14-Byte-Muster war nur das erste identifizierte Muster – diese neuen Erkenntnisse verbessern unser Verständnis des Marvell 6000 Switch-Bugs.
Neue Erkenntnisse: Einfachste toxische Muster identifiziert#
Nach systematischen Tests mit adaptiven Suchalgorithmen haben wir neue Erkenntnisse gewonnen: Der Toxic Frame Bug kann durch sehr einfache Muster ausgelöst werden – sogar durch einen einzelnen Byte-Wert, der nur 120-121 mal wiederholt wird.
Neue Erkenntnisse: Byte-wertspezifischer Bug#
Der Bug ist byte-wertspezifisch, nicht nur längenbasiert! Nach Tests von 100+ zufälligen einzelnen Byte-Werten bei 794 Bytes lösen nur zwei Byte-Werte den Bug aus:
0x4a(Byte-Wert 74)0xb5(Byte-Wert 181)
Minimale toxische Längen#
| Byte-Wert | Minimale toxische Länge | Datei |
|---|---|---|
0x4a | 120 Bytes | minimum_0x4a.bin |
0xb5 | 121 Bytes | minimum_0xb5.bin |
Dies sind die kleinsten bestätigten toxischen Muster – nur 120-121 Bytes eines einzelnen wiederholten Byte-Werts!
Bedeutung dieser Erkenntnisse#
Diese Entdeckung zeigt uns:
- Der Bug ist byte-wertspezifisch – nur
0x4aund0xb5lösen ihn aus (bei bestimmten Längen), nicht alle Byte-Werte - Die minimale toxische Länge beträgt 120-121 Bytes für diese spezifischen Byte-Werte (nicht 794 Bytes)
- Das ursprüngliche 14-Byte-Muster war nicht besonders – es war nur das erste entdeckte Muster
- Der Bug scheint mit spezifischen Byte-Werten zusammenzuhängen, die bei bestimmten Längen mit der Paketverarbeitung des Switches interagieren
Dies deutet darauf hin, dass der Marvell Switch einen Hardware-Bug in seiner Paketverarbeitung hat, der fehlschlägt, wenn er spezifische Byte-Werte (0x4a oder 0xb5) wiederholt in mindestens 120-121 Bytes antrifft.
Hexdump der minimalen toxischen Muster#
minimum_0x4a.bin (120 Bytes - 100% 0x4a):
00000000: 4a 4a 4a 4a 4a 4a 4a 4a 4a 4a 4a 4a 4a 4a 4a 4a JJJJJJJJJJJJJJJJ
00000010: 4a 4a 4a 4a 4a 4a 4a 4a 4a 4a 4a 4a 4a 4a 4a 4a JJJJJJJJJJJJJJJJ
...
(0x4a wiederholt 120 mal - MINIMALE TOXISCHE LÄNGE)
minimum_0xb5.bin (121 Bytes - 100% 0xb5):
00000000: b5 b5 b5 b5 b5 b5 b5 b5 b5 b5 b5 b5 b5 b5 b5 b5 ................
00000010: b5 b5 b5 b5 b5 b5 b5 b5 b5 b5 b5 b5 b5 b5 b5 b5 ................
...
(0xb5 wiederholt 121 mal - MINIMALE TOXISCHE LÄNGE)
Wie diese Erkenntnisse unser Verständnis verbessern#
Das ursprüngliche toxic.bin (1 KB) enthielt ein 14-Byte-Muster, das 39-mal wiederholt wurde. Wir dachten, dieses komplexe Muster wäre etwas Besonderes. Jetzt wissen wir:
- Das ursprüngliche Muster war nur der Anfang – es war das erste, das wir zufällig gefunden haben
- Die wahre Natur des Bugs ist viel einfacher – es geht um spezifische Byte-Werte bei bestimmten Längen
- Der Bug ist deterministisch und vorhersagbar – jedes Vorkommen dieser Byte-Muster bei diesen Längen wird den Transfer stoppen
Technische Implikationen#
Diese Erkenntnisse haben folgende Auswirkungen:
- Für Entwickler: Wir können jetzt viel effizienter nach dem Bug suchen und ihn vermeiden
- Für Netgate: Der Hardware-Bug kann jetzt präzise beschrieben und behoben werden
- Für Anwender: Wir verstehen jetzt besser, warum bestimmte Dateien “zufällig” an bestimmten Punkten stoppen
Repository und Testdateien#
Alle Testdateien und das vollständige Repository sind verfügbar auf GitHub: styliteag/toxicframe .
Repository-Struktur:
├── binarys/ # Binäre Testdateien
│ ├── toxic.bin # Ursprüngliches 1KB toxisches File
│ ├── toxic_smallest.bin # Kleinstes bestätigtes toxisches File
│ ├── maybe_smallest.bin # Kandidat für noch kleineres
│ ├── simplest_1.bin # Einfachstes: 0x4a × 794 (bestätigt toxisch)
│ ├── simplest_2.bin # Einfachstes: 0xb5 × 794 (bestätigt toxisch)
│ ├── simplest_3.bin # Meist 0x22 × 794 (gelegentlich)
│ ├── minimum_0x4a.bin # MINIMUM: 0x4a × 120 (kleinstes toxisches)
│ └── minimum_0xb5.bin # MINIMUM: 0xb5 × 121 (kleinstes toxisches)
├── tests/ # Test-Suite
│ ├── test_toxicframe.py # Haupt-Test-Skript
│ ├── binary_search_toxic.py # Kleinste toxische Pakete finden
│ ├── analyze_toxic_ranges.py # Toxische Byte-Bereiche analysieren
│ └── ... # Mehr Test-Tools
└── presentation/ # 39C3 Lightning Talk
├── toxicframe.md # Marp-Folien
├── toxicframe.pdf # Exportierte PDF
└── speaker_notes.md # Sprecher-Notizen
Wim Bonis ist CTO der Stylite AG und beschäftigt sich schwerpunktmäßig mit Storage und Netzwerktechnik. Die Toxic Frame Analyse ist ein Community-Projekt zur Untersuchung dieses Hardware-Bugs.
