Cifrele care urmeaza spun totul. August 2025, in salbaticie 90 de zile inainte de patch. Lasati audienta sa absoarba urmatoarele 4 numere - pauza dupa fiecare.
Regulile cheie ale limbajului C: malloc(n) iti da n octeti, dar pointer-ul NU stie cati - 'n' nu e in pointer. memcpy(dst, src, n) copiaza n octeti, FARA verificarea ca 'dst' are atatia. buffer[i] - 'i' e doar un numar, nu e index marginit de limita bufferului. Charter C89: **'Trust the programmer.'** MATH/ANALOGIE: ai un loc de parcare alocat. Pui acolo masini mai mari decat locul tau - se intind in locul vecinului. Daca pui masinile potrivite (octeti precis calculati), nu doar ca intri in locul vecinului - **ii descuiezi casa**. Asta este toata baza exploit-urilor: scrii N octeti unde ai alocat M, cu N > M. Restul e geometrie.
Regulile cheie ale limbajului C: malloc(n) iti da n octeti, dar pointer-ul NU stie cati - 'n' nu e in pointer. memcpy(dst, src, n) copiaza n octeti, FARA verificarea ca 'dst' are atatia. buffer[i] - 'i' e doar un numar, nu e index marginit de limita bufferului. Charter C89: **'Trust the programmer.'** MATH/ANALOGIE: ai un loc de parcare alocat. Pui acolo masini mai mari decat locul tau - se intind in locul vecinului. Daca pui masinile potrivite (octeti precis calculati), nu doar ca intri in locul vecinului - **ii descuiezi casa**. Asta este toata baza exploit-urilor: scrii N octeti unde ai alocat M, cu N > M. Restul e geometrie.
Cauza comuna: C fara bounds checking. 67-70% din CVE-urile in C/C++ = memory safety. Date din Microsoft, Google, Mozilla, Project Zero - independente, pe multi ani. Aceasta prezentare se concentreaza pe CWE-787, dar mecanismul se generalizeaza la toata familia. MATH/IMPACT: OOB write nu inseamna doar crash. Daca atacatorul controleaza ce octeti scrie SI unde, modifica pointeri, return addresses, metadate - asta TRANSFORMA o eroare de dimensiune in control de executie.
Cauza comuna: C fara bounds checking. 67-70% din CVE-urile in C/C++ = memory safety. Date din Microsoft, Google, Mozilla, Project Zero - independente, pe multi ani. Aceasta prezentare se concentreaza pe CWE-787, dar mecanismul se generalizeaza la toata familia. MATH/IMPACT: OOB write nu inseamna doar crash. Daca atacatorul controleaza ce octeti scrie SI unde, modifica pointeri, return addresses, metadate - asta TRANSFORMA o eroare de dimensiune in control de executie.
30 de ani. Acelasi pattern. 1996: Aleph One formalizeaza stack smashing in Phrack 49 - tehnica devine cunoscuta. 2001: 'Once upon a free()' - heap exploitation. 2021: NSO Group / FORCEDENTRY - zero-click iPhone, jurnalisti compromisi cu acelasi pattern. 2025: lantul nostru WhatsApp-ImageIO - alt messenger, alt parser, aceeasi familie de bug. Mai 2026 (in timp ce scriam): inca doua CVE noi in kernel Linux (Copy Fail + Dirty Frag). PUNCH: NU e coincidenta. E consecinta arhitecturala. Limbajul C nu a rezolvat problema in 30 de ani. Atacurile s-au schimbat. Tintele s-au schimbat. Mitigarile au devenit complexe. Dar primitiva de baza ramane.
MOMENT WOW TEHNIC - LASA ANIMATIA SA RESPIRE. Audienta netehnica trebuie sa vada SAFE -> HIJACKED. Setup: stack frame al unei functii active. 3 regiuni vizibile: buffer (64 octeti) | saved RBP (8 octeti) | return address (8 octeti). Return address = unde sare CPU dupa terminarea functiei. Daca o suprascriem, controlam fluxul. Pe pas: STEP 1 (16 bytes) - SAFE, totul intact. STEP 2 (72 bytes) - depasim buffer cu 8 octeti, saved RBP corupt. STEP 3 (80 bytes) - ajungem la return address. CPU NU STIE - va sari unde am scris. STAREA: HIJACKED. STEP 4 (payload) - 64 buffer + 8 dummy + 8 octeti exacti = adresa functiei `complete_level`, little-endian. STEP 5 (ret) - CPU sare la complete_level. 'Congratulations, you've finished!' MATH: 80 = 64 + 8 + 8. 16 octeti precis ne dau control complet de executie. ANALOGIE: 'ai inchis usa dar lasat cheile in usa. Cineva care trimite 80 octeti in loc de 64 intra fara sa sparga nimic.'
MOMENT WOW TEHNIC - LASA ANIMATIA SA RESPIRE. Audienta netehnica trebuie sa vada SAFE -> HIJACKED. Setup: stack frame al unei functii active. 3 regiuni vizibile: buffer (64 octeti) | saved RBP (8 octeti) | return address (8 octeti). Return address = unde sare CPU dupa terminarea functiei. Daca o suprascriem, controlam fluxul. Pe pas: STEP 1 (16 bytes) - SAFE, totul intact. STEP 2 (72 bytes) - depasim buffer cu 8 octeti, saved RBP corupt. STEP 3 (80 bytes) - ajungem la return address. CPU NU STIE - va sari unde am scris. STAREA: HIJACKED. STEP 4 (payload) - 64 buffer + 8 dummy + 8 octeti exacti = adresa functiei `complete_level`, little-endian. STEP 5 (ret) - CPU sare la complete_level. 'Congratulations, you've finished!' MATH: 80 = 64 + 8 + 8. 16 octeti precis ne dau control complet de executie. ANALOGIE: 'ai inchis usa dar lasat cheile in usa. Cineva care trimite 80 octeti in loc de 64 intra fara sa sparga nimic.'
Lantul real 2025: 5 stadii, 2 CVE-uri, 0 clickuri. Pe ecran vedem fluxul: atacator -> server WhatsApp -> telefon victima -> ImageIO -> cod arbitrar. Acum urmariti pachetul (dot rosu) cum trece prin lant.
Atacatorul cunoaste DOAR numarul de telefon al victimei. Trimite un mesaj de sincronizare (linked-device) malitios. WhatsApp il accepta FARA AUTORIZARE corecta (CVE-2025-55177 - urmeaza la s11). Telefonul descarca + proceseaza imaginea controlata de atacator. ImageIO face OOB write pe heap (CVE-2025-43300 - urmeaza la s12). Cod arbitrar in procesul parserului - atacatorul controleaza acel proces.
WhatsApp linked-device sync sincronizeaza mesaje intre telefon + desktop + web. BUG: serverul NU verifica daca sursa era un device inscris legitim. Atacatorul trimite un mesaj sync craftat -> telefonul victimei descarca + proceseaza URL atacator. **No tap. No notification. No consent.** ZERO-CLICK HOOK (insistati): utilizatorul nu face NIMIC gresit. Nu poate sa se apere. Ai iPhone? Ai WhatsApp? Ai versiunea vulnerabila? Esti compromis. Singura aparare e patch-ul - pe care nu il poti instala daca nu a fost inca publicat (90 zile in salbaticie). TRANZITIE: primul bug convinge telefonul sa proceseze arma. Al doilea bug transforma arma in executie de cod - urmeaza la s12.
WhatsApp linked-device sync sincronizeaza mesaje intre telefon + desktop + web. BUG: serverul NU verifica daca sursa era un device inscris legitim. Atacatorul trimite un mesaj sync craftat -> telefonul victimei descarca + proceseaza URL atacator. **No tap. No notification. No consent.** ZERO-CLICK HOOK (insistati): utilizatorul nu face NIMIC gresit. Nu poate sa se apere. Ai iPhone? Ai WhatsApp? Ai versiunea vulnerabila? Esti compromis. Singura aparare e patch-ul - pe care nu il poti instala daca nu a fost inca publicat (90 zile in salbaticie). TRANZITIE: primul bug convinge telefonul sa proceseze arma. Al doilea bug transforma arma in executie de cod - urmeaza la s12.
Fisier DNG (raw Adobe, bazat pe TIFF) cu stream JPEG lossless embedded. DOUA CAMPURI declara cati componente per pixel: TIFF SamplesPerPixel = 1. JPEG Nf (component count) = 3. Nimeni nu verifica ca sunt egali. Atacatorul controleaza ambii.
**Allocate for 1, write 3.** Parserul aloca memorie pentru 1 componenta. Bucla de decodare scrie pentru 3. Rezultat: OOB write de 3x marimea alocata, pe heap. MATH/IMPACT: 2 octeti. 2 locatii diferite in fisier. Neverificati niciodata. Asta este toata vulnerabilitatea, la nivel conceptual. Quarkslab a numit asta 'two bytes that make size matter'. ANALOGIE: comanzi parcare pentru 1 masina, dar parcheaza 3. Cele 2 in plus se intind in locul vecin si suprascriu ce e acolo (in cazul de fata, un pointer de functie din ImageIO).
**Allocate for 1, write 3.** Parserul aloca memorie pentru 1 componenta. Bucla de decodare scrie pentru 3. Rezultat: OOB write de 3x marimea alocata, pe heap. MATH/IMPACT: 2 octeti. 2 locatii diferite in fisier. Neverificati niciodata. Asta este toata vulnerabilitatea, la nivel conceptual. Quarkslab a numit asta 'two bytes that make size matter'. ANALOGIE: comanzi parcare pentru 1 masina, dar parcheaza 3. Cele 2 in plus se intind in locul vecin si suprascriu ce e acolo (in cazul de fata, un pointer de functie din ImageIO).
**Engineering differs. Mechanism doesn't.** Structura IDENTICA: buffer alocat, OOB write, pointer adiacent suprascris, executie redirectionata. Diferenta: in CTF e simplu - in productie e heap grooming + bypass ASLR + bypass PAC + multi pasi de inginerie. Dar mecanismul DE BAZA e acelasi. **Aceeasi primitiva. Alta decada.** MOMENT WOW ARGUMENTATIV - PAUZA 2 secunde dupa fraza. Lasa ideea sa aterizeze.
**Engineering differs. Mechanism doesn't.** Structura IDENTICA: buffer alocat, OOB write, pointer adiacent suprascris, executie redirectionata. Diferenta: in CTF e simplu - in productie e heap grooming + bypass ASLR + bypass PAC + multi pasi de inginerie. Dar mecanismul DE BAZA e acelasi. **Aceeasi primitiva. Alta decada.** MOMENT WOW ARGUMENTATIV - PAUZA 2 secunde dupa fraza. Lasa ideea sa aterizeze.
Dirty Frag (CVE-2026-...): doua CVE-uri in kernel, in IPsec si RxRPC. Aceeasi categorie - write fara verificare, privilege escalation. Pattern CONFIRMAT - 2026. Coruptia de memorie nu s-a oprit. Continua in TIMP REAL, chiar in timpul acestei prezentari. Nu sunt exemple alese cu grija. Sunt cele mai recente, de luni intregi de back-to-back.
Detaliu pe Copy Fail si Dirty Frag - 2026 pattern confirmed. Comparam structural cele doua bug-uri noi cu pattern-ul nostru.
Copy Fail (1 mai 2026): kernel Linux, copy_from_user fara verificare suficienta. User local scrie 4 octeti intr-un fisier setuid -> devine root. Detectat de AI tool (Xint Code), nu de cercetator uman.
Dirty Frag (8 mai 2026): IPsec + RxRPC subsisteme kernel. Patch IPsec disponibil, RxRPC inca pending. Concluzie: NU am ales exemple cu grija. Sunt cele mai recente CVE-uri publice. MATH: ~3000 CVE-uri publice pe luna in 2025-2026. Memory safety = familia dominanta. Atacurile cibernetice se intampla in fiecare zi, undeva, in subsisteme pe care nu le vedem.
Dirty Frag (8 mai 2026): IPsec + RxRPC subsisteme kernel. Patch IPsec disponibil, RxRPC inca pending. Concluzie: NU am ales exemple cu grija. Sunt cele mai recente CVE-uri publice. MATH: ~3000 CVE-uri publice pe luna in 2025-2026. Memory safety = familia dominanta. Atacurile cibernetice se intampla in fiecare zi, undeva, in subsisteme pe care nu le vedem.
Dirty Frag (8 mai 2026): IPsec + RxRPC subsisteme kernel. Patch IPsec disponibil, RxRPC inca pending. Concluzie: NU am ales exemple cu grija. Sunt cele mai recente CVE-uri publice. MATH: ~3000 CVE-uri publice pe luna in 2025-2026. Memory safety = familia dominanta. Atacurile cibernetice se intampla in fiecare zi, undeva, in subsisteme pe care nu le vedem.
Singura solutie structurala: elimini posibilitatea. NU pedepsi consecinta. SOFTWARE - Rust: borrow checker previne OOB write la COMPILE TIME (verificare statica). Cod safe in Rust nu poate avea OOB write neobservat - compilatorul forteaza verificarile pe care in C le depindeau de disciplina programatorului. Mainline Linux are Rust din kernel 6.1. Ubuntu 26.04 a migrat sudo la sudo-rs. HARDWARE - ARM MTE (Memory Tagging Extension): fiecare granula de memorie are un tag de 4 biti. Acces cu tag gresit = trap HW. Ar fi prins exact overflow-ul din CVE-2025-43300 (tag-ul bufferului diferit de obiectul vecin). DOUA INTREBARI DESCHISE (le lasam audientei): 1) ImageIO NU a fost rescris in Rust - de ce? 2) Apple NU a activat MTE pe iOS in productie - de ce? Recomandare pragmatica: incepi cu parserele cele mai expuse la input nevalidat (imagini, fonturi, arhive, media).
Referintele complete - 22 de entries - sunt in lucrare la mcs.danielwagner.ro/paper. Sursa: advisories Apple si WhatsApp, analize Quarkslab, Citizen Lab, Project Zero (FORCEDENTRY precedent), MITRE Top 25, plus exemple recente din kernel Linux. Lucrarea este o sinteza: pune in aceeasi linie laboratorul educational, CVE-ul real, si pattern-ul structural. Acolo gasiti si laboratoarele interactive (heap lab, stack lab) si codul sursa al companion site-ului.