Zephyrnet-logo

WinRAR gebruiken? Zorg ervoor dat u deze bugs bij het uitvoeren van code patcht...

Datum:

Het eerbiedwaardige RAR-programma, een afkorting van Roshal's archiver naar de oorspronkelijke maker, is al tientallen jaren populair in kringen voor het delen van bestanden en softwaredistributie, niet in de laatste plaats vanwege de ingebouwde functies voor foutherstel en bestandsreconstructie.

Vroege internetgebruikers zullen zich met weinig genegenheid de tijd herinneren dat grote bestandsoverdrachten werden verzonden als gecomprimeerde archieven, verdeeld over meerdere diskettes, of geüpload naar groottebewuste online forums als een reeks stukjes van bescheiden formaat die eerst werden gecomprimeerd om op te slaan. spatie en vervolgens uitgebreid naar een tekstgecodeerde vorm die alleen ASCII bevat.

Als er een diskette kwijtraakte of niet goed kon worden teruggelezen, of als een deel van een 12-delige archiefupload per ongeluk van de server werd verwijderd, had je pech.

RAR, of WinRAR in zijn hedendaagse Windows-vorm, hielp dit probleem op te lossen door zogenaamde herstelvolumes.

Deze opgeslagen foutcorrectiegegevens waren zodanig dat uit meerdere delen bestaande archieven automatisch en volledig konden worden hersteld, zelfs als een heel deel (of meer, afhankelijk van hoeveel herstelinformatie er werd bewaard) verloren ging of onherstelbaar werd.

Een reservewiel in de kofferbak/kofferbak bewaren

Kennelijk werd in RAR-archieven tot en met versie 4 gebruik gemaakt van zogenaamde pariteitscorrectie; nieuwere versies gebruiken een computationeel complexer maar krachtiger foutcorrectiesysteem dat bekend staat als Reed-Solomon-codes.

Op pariteit gebaseerde correctie is afhankelijk van de XOR-bewerking, die we hier zullen aangeven met het symbool ⊕ (een plusteken in een cirkel).

XOR is een afkorting van exclusief of, wat aangeeft "of X is waar of Y is waar, maar niet beide tegelijk", en volgt dus dit waarheidstabel, die we construeren door aan te nemen dat X en Y alleen de waarden 0 (onwaar) of 1 (waar) kunnen hebben:

Als X=0 en Y=0 dan X ⊕ Y = 0 (twee onwaarheden maken onwaar) Als X=1 en Y=0 dan X ⊕ Y = 1 (één kan waar zijn, maar niet allebei) Als X=0 en Y=1 dan X ⊕ Y = 1 (één kan waar zijn, maar niet beide) Als X=1 en Y=1 dan X ⊕ Y = 0 (het moet het een of het ander zijn)

De XOR-functie werkt een beetje zoals de vraag: “Wil je koffie of thee?”

Als je 'ja' zegt, moet je dan alleen koffie kiezen, of alleen thee, want je kunt niet van elk één kopje drinken.

Zoals je uit de waarheidstabel hierboven kunt opmaken, heeft XOR de handige eigenschappen dat X ⊕ 0 = X en X ⊕ X = 0.

Stel je nu voor dat je drie datablokken hebt met de namen A, B en C, en je berekent een vierde blok P door A, B en C samen te XORen, zodat P = (A ⊕ B ⊕ C).

Gegeven de waarheidstabel hierboven, en gezien het feit dat XOR bekend staat als commutatieve, wat betekent dat de volgorde van de waarden in een berekening desgewenst kan worden omgewisseld, zodat X ⊕ Y = Y ⊕ Zof A ⊕ B ⊕ C = C ⊕ B ⊕ A = B ⊕ C ⊕ A enzovoort, we kunnen zien dat:

A ⊕ B ⊕ C ⊕ P = A ⊕ B ⊕ C ⊕ (A ⊕ B ⊕ C) = (A⊕A) ⊕ (B⊕B) ⊕ (C⊕C) = 0 ⊕ 0 ⊕ 0 = 0

Kijk nu wat er gebeurt als een van A, B of C verloren gaat:

A ⊕ B ⊕ P = A ⊕ B ⊕ (A ⊕ B ⊕ C) = (A⊕A) ⊕ (B⊕B) ⊕ C = 0 ⊕ 0 ⊕ C = C <--het ontbrekende deel keert terug! A ⊕ C ⊕ P = A ⊕ C ⊕ (A ⊕ B ⊕ C) = (A⊕A) ⊕ (C⊕C) ⊕ B = 0 ⊕ 0 ⊕ B = B <--het ontbrekende deel keert terug! B ⊕ C ⊕ P = B ⊕ C ⊕ (A ⊕ B ⊕ C) = (B⊕B) ⊕ (C⊕C) ⊕ A = 0 ⊕ 0 ⊕ A = A <--het ontbrekende deel keert terug!

En als P verloren gaat, kunnen we dit negeren omdat we kunnen berekenen A ⊕ B ⊕ C toch.

Simpel gezegd betekent het hebben van het pariteitsgegevensdeel P dat we altijd elk ontbrekend deel kunnen reconstrueren, ongeacht welk deel het is.

De foutherstelfout

Nou, na wat we aannemen is het vele jaren onopgemerkt gebleven, een bug die nu de naam krijgt CVE-2023-40477 is opgedoken in WinRAR.

Deze bug kan worden geactiveerd (ironisch genoeg misschien) wanneer het product gebruik maakt van dit gegevensherstelsysteem.

Voor zover we kunnen zien, kan een boobytrap-pariteitsgegevensfragment dat in een archief wordt geplaatst, de WinRAR-code ertoe verleiden gegevens te schrijven buiten het geheugengebied dat eraan is toegewezen.

Dit leidt tot een exploiteerbaar buffer overloop kwetsbaarheid.

Gegevens die zijn geschreven waar ze niet thuishoren, worden uiteindelijk behandeld als programmacode die wordt uitgevoerd, in plaats van als gewone oude gegevens die moeten worden gebruikt bij het dearchiveringsproces.

Deze bug kreeg geen ernstscore van 10/10 op de CVSS-gevarenschaal, maar kwam uit op 7.8/10, omdat de kwetsbaarheid niet kan worden uitgebuit zonder enige vorm van hulp van de gebruiker die het doelwit is.

Bug de tweede

Interessant is dat er in de nieuwste versie van WinRAR een tweede beveiligingsfout is verholpen, en hoewel deze minder hinderlijk klinkt dan de hierboven genoemde CVE-2023-40477-fout, TechCrunch suggereert dat het in het echte leven is uitgebuit via archieven met boobytraps “gepost op ten minste acht openbare forums [die betrekking hebben op] een breed scala aan handels-, investerings- en cryptocurrency-gerelateerde onderwerpen.”

We kunnen hiervoor geen CVE-nummer vinden, maar WinRAR beschrijft het eenvoudigweg als:

 WinRAR kan een verkeerd bestand starten nadat een gebruiker dubbelklikt op een item in een speciaal vervaardigd archief.

Met andere woorden, een gebruiker die een archief opende en besloot naar een ogenschijnlijk onschuldig bestand daarin te kijken (bijvoorbeeld een README-tekstbestand of een onschuldig uitziende afbeelding), zou in plaats daarvan onverwacht een ander bestand uit het archief kunnen starten, zoals als een uitvoerbaar script of programma.

Dat lijkt een beetje op het ontvangen van een e-mail met een veilig ogende bijlage en een riskant ogende bijlage, waarbij wordt besloten om te beginnen met alleen het veilig ogende bijlage te onderzoeken, maar in plaats daarvan onbewust het riskante bestand opstart.

Voor zover we kunnen zien, en ironisch genoeg, bestond deze bug in de code van WinRAR voor het uitpakken van ZIP-bestanden, en niet in de code voor het verwerken van het eigen RAR-bestandsformaat.

ZIP-bestanden met twee gezichten zijn al jaren een cyberbeveiligingsprobleem, omdat de index van bestanden en mappen in elk ZIP-archief twee keer voorkomt: één keer in een reeks datablokken die door het bestand heen zijn geweven, en dan nog een keer in een enkel stuk gegevens aan de andere kant van het bestand. einde. Code die bestanden verifieert op basis van de ene index, maar deze op basis van de andere index extraheert en gebruikt, zonder te controleren of de twee indices consistent zijn, heeft in de loop der jaren tot talloze exploiteerbare kwetsbaarheden geleid. We weten niet of dit probleem met de dubbele index de hoofdoorzaak is van de recente WinRAR-bug, maar het herinnert ons eraan dat het uitpakken van archiefbestanden een complex en foutgevoelig proces kan zijn dat zorgvuldige aandacht voor de beveiliging vereist, zelfs ten koste van extra verwerking en verminderde prestaties.

Wat te doen?

Als u een WinRAR-gebruiker bent, zorg ervoor dat je op de laatste versie, wat op het moment van schrijven 6.23 is [2023-08-23T16:30Z]

Blijkbaar zit er geen automatisch updatesysteem in de WinRAR-software, dus je moet het nieuwe installatieprogramma downloaden en het zelf uitvoeren om een ​​oude versie te vervangen.

Als je een programmeur bent, Vergeet niet om de verouderde code te controleren die nog in uw software aanwezig is, maar die als “gepensioneerd” of “niet langer aanbevolen voor nieuwe gebruikers” wordt beschouwd.

Voor zover we kunnen zien genereert WinRAR geen ouderwetse herstelgegevens meer en gebruikt het sinds versie 5 slimmere algoritmen voor foutcorrectie, maar verwerkt het vanwege achterwaartse compatibiliteit nog steeds oude bestanden als ze worden gepresenteerd.

Houd er rekening mee dat wanneer aanvallers bestanden met boobytraps maken in de hoop uw software kapot te maken, ze uw software doorgaans toch niet gebruiken om die bestanden te maken. Het is dus nooit genoeg om uw eigen invoerroutines alleen te testen aan de hand van bestanden die uw eigen uitvoerroutines oorspronkelijk hebben gemaakt.

Als je het niet hebt overwogen fuzzing, een jargonterm die verwijst naar een testtechniek waarbij miljoenen gepermuteerde, verkeerd gevormde en opzettelijk onjuiste invoer aan uw software worden gepresenteerd terwijl deze wordt gecontroleerd op wangedrag...

… dan is dit misschien het moment om erover na te denken.

Goede fuzzers voeren je code niet alleen keer op keer uit, maar proberen dat ook pas de aanpassingen aan, hacks en aanpassingen die ze aanbrengen in hun valse invoergegevens, zodat zoveel mogelijk van uw code wordt uitgeprobeerd.

Dit helpt u te krijgen wat bekend staat als goed code dekking tijdens het testen, inclusief het forceren van uw programma langs zeldzame en ongebruikelijke codepaden die bij regelmatig gebruik vrijwel nooit worden geactiveerd, en waar onontdekte kwetsbaarheden jarenlang onopgemerkt op de loer hebben gelegen.


spot_img

Laatste intelligentie

spot_img