Zephyrnet-logo

Ernstige beveiliging: leren van de nieuwste bug-update van curl

Datum:

Je hebt misschien nog nooit gehoord van Curl (of curl, omdat het correcter is geschreven), maar het is een van die open source-toolkits die je vrijwel zeker toch hebt gebruikt, waarschijnlijk heel vaak, zonder het te weten.

De open source-wereld biedt talloze van dit soort tools - alomtegenwoordig, veel gebruikt in softwareprojecten over de hele wereld, maar vaak onzichtbaar of verborgen onder de dekens, en daarom misschien niet zo goed gewaardeerd als ze zouden moeten zijn.

SQLite, OpenSSL, zlib, FFmpeg, Minix...

…de lijst met supply chain-componenten die zijn ingebouwd in hardware en software die u altijd gebruikt, vaak onder totaal andere namen, is lang.

Curl is een van die tools, en als zijn eigen website legt uit, het is een "opdrachtregeltool en bibliotheek voor het overbrengen van gegevens met URL's (sinds 1998)."

Het maakt deel uit van bijna elke Linux-distributie op de planeet, inclusief veel, zo niet de meeste embedded IoT-apparaten, die het gebruiken om dingen als updates en data-uploads te scripten; het wordt geleverd met Apple's macOS; en het wordt handig meegeleverd met Windows 10 en Windows 11.

U kunt curl ook bouwen en gebruiken als een gedeelde bibliotheek (zoek naar bestanden met de naam libcurl.*.so or CURL*.DLL), zodat je de code van curl kunt aanroepen zonder een apart proces uit te voeren en de uitvoer daarvan te verzamelen, maar dat telt nog steeds als "krul gebruiken".

Laatste update

Het project heeft zojuist de nieuwste update uitgebracht, waarbij zes middelgrote CVE-genummerde bugs zijn verholpen en curl naar versie is gebracht 7.83.1.

Je kunt controleren welke versie je hebt met het commando curl --version, In deze trant:

$ curl --versie curl 7.83.1 (x86_64-pc-linux-gnu) libcurl/7.83.1 OpenSSL/1.1.1o zlib/1.2.12 brotli/1.0.9 zstd/1.5.2 c-ares/1.18.1 libidn2/2.3.2 libpsl/0.21.1 (+libidn2/2.3.0) libssh2/1.10.0 nghttp2/1.47.0 OpenLDAP/2.6.2 Releasedatum: 2022-05-11 Protocollen: dict-bestand ftp ftps gopher gophers http https imap imaps ldap ldaps mqtt pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp Kenmerken: alt-svc AsynchDNS brotli GSS-API HSTS HTTP2 HTTPS-proxy IDN IPv6 Kerberos Largefile libz NTLM NTLM_WB PSL SPNEGO SSL TLS-SRP UnixSockets zstd

De fouten waren:

  • CVE-2022-30115. HSTS-bypass via volgpunt. HSTS staat voor HTTP Strict Transport Security. Het is een cookie-achtig systeem waarmee een website die u via HTTPS bezoekt, u en de software die u gebruikt, kan vertellen: “Doe dit in de toekomst altijd! Gebruik nooit meer gewoon oude HTTP, zelfs niet als de gebruiker een oude http:// link ergens begraven in een webpagina of een script en blijft het gebruiken.” Het idee is dat door uw HTTP-server om te leiden naar de equivalente HTTPS-pagina's, bezoekers die per ongeluk HTTP gebruiken, dit slechts één keer zullen doen. Na de eerste omleiding zal hun browser de HSTS-vlag onthouden die is ingesteld door de pagina waarnaar ze zijn doorgestuurd en in de toekomst beginnen met HTTPS. Helaas, aangezien servernamen met of zonder punt aan het einde kunnen worden geschreven (strikt genomen, het domein) example DOT com is eigenlijk example DOT com DOT), zou curl kunnen worden misleid om de twee varianten te behandelen alsof het verschillende websites zijn, waardoor aanvallers mogelijk een manier krijgen om curl onverwachts naar een onveilige verbinding te lokken die daarom kan worden omgeleid, bespioneerd of gewijzigd tijdens het transport. De bijgewerkte code herkent deze "naamparen" nu als verwijzend naar dezelfde server.
  • CVE-2022-27782. TLS- en SSH-verbinding te gretig hergebruik. Curl probeert bestaande webverbindingen open te houden voor hergebruik, aangezien het heel gebruikelijk is om herhaalde verzoeken te doen aan dezelfde site, en zelfs aan dezelfde map, bij het downloaden van grote hoeveelheden nieuwe bestanden zoals updates, afbeeldingsgalerijen, enzovoort . Over het algemeen zijn er geen beveiligingsproblemen om dit te doen, zolang hergebruikte verbindingen op precies dezelfde manier verbinding maken met dezelfde site. Maar curl controleerde niet altijd of alle verbindingsinstellingen hetzelfde waren, zodat sommige beveiligingsdetails tussentijds konden worden verwisseld. Die details kunnen informatie bevatten zoals gebruikersnaam en wachtwoord, waardoor een stiekeme gebruiker theoretisch kan meeliften op een eerdere verbinding, ook al zouden de authenticatiegegevens die ze in hun eigen verzoek hebben opgegeven niet doorstaan ​​​​als de verbinding helemaal opnieuw tot stand zou worden gebracht. (Dit is een andere) slip twixt authenticatie cup en activatie lip bug, zoals de RubyGems beveiligingsbypass waar we eerder deze week over schreven.) De bijgewerkte code dwingt nu een nieuwe verbinding af, tenzij alle verbindingsinstellingen exact overeenkomen met die van het vorige gebruik.
  • CVE-2022-27781. CERTINFO oneindige drukke lus. Deze bug kan worden geactiveerd als je curl vraagt ​​om alle details van de zogenaamde vertrouwensketen van webcertificaten in een TLS-beveiligde verbinding. Curl kan vast komen te zitten in een oneindige lus terwijl hij zich een weg baant door de lijst. Aangezien je curl de opdracht kunt geven om de vertrouwensketen te valideren zonder alle certificaten voor jezelf op te halen (je kunt zelfs stellen dat het veiliger is om curl de verificatie voor je te laten doen, net zoals het veiliger is om een vertrouwde cryptografische bibliotheek dan om uw eigen te breien), is het onwaarschijnlijk dat deze bug veel real-life code zal beïnvloeden. Hulpprogramma's voor beveiligingslogboeken zijn vaak geïnteresseerd in het onderzoeken en vastleggen van details van de certificaatketen, maar we hopen dat dit soort tools, die ontwikkeld zijn om mogelijke anomalieën op te sporen en vast te leggen, hun eigen oneindige-lusbeveiliging zouden bevatten om te detecteren en maak een einde aan pogingen tot speleologie die nooit eindigen.
  • CVE-2022-27780. Percentagegecodeerd padscheidingsteken in URL-host. Dit is een fascinerende bug die je eraan herinnert hoe moeilijk het is om om te gaan met alle variaties en grillen van hoe gegevens worden gepresenteerd in webverzoeken. URL's gebruiken bijvoorbeeld de SLASH teken op een speciale manier, als scheidingsteken, dus als u bijvoorbeeld een schuine streep in een zoekterm wilt coderen, moet u deze ook op een speciale manier coderen, met een procentteken gevolgd door de hexadecimale code: %2F. Helaas kon je stiekem een %2F in het servernaamgedeelte van een curl-URL, bijvoorbeeld door te schrijven dodgy.invalid%2Fmy.nice.example, die naar een URL-filter lijkt alsof het een server is die wordt gehost onder een domein met de naam nice.example). Maar toen curl daadwerkelijk de verbinding ging maken, zou de string worden omgezet in dodgy.invalid/my.nice.example, waar de gedecodeerde SLASH teken zou plotseling fungeren als scheidingsteken tussen de servernaam en de rest van de URL, dus de verbinding zou worden gemaakt met het topniveaudomein invalid gebruiken.
  • CVE-2022-27779. Cookie voor trailing dot TLD. Dit was een soortgelijk soort string-mismatch-fout als het eerste item. Browsers en downloaders worden geacht cookies te negeren die zijn ingesteld voor zogenaamde openbare voorvoegsels, zoals .com or .co.uk, zodat gewetenloze operators u niet kunnen misleiden om cookies in te stellen op een domeinniveau waaronder elk subdomein waarschijnlijk onder de controle staat van een andere eigenaar. Zoals je je kunt voorstellen, zou dit het "dezelfde oorsprong"-beleid in de war brengen en cookiegegevens kunnen lekken tussen teo-sites die eigendom waren van en beheerd werden door totaal verschillende mensen. Een punt aan het einde van een domeinnaam kan de controle van curl in de war brengen en het mogelijk maken dat cookies worden ingesteld voor domeinen met een gevaarlijk hoog niveau.
  • CVE-2022-27778. Curl verwijdert verkeerd bestand bij fout. Dit is een herinnering aan hoe verschillende productopties met elkaar kunnen concurreren op manieren die de programmeur nooit had verwacht. Krul heeft een optie --no-clobber, waarmee wordt voorkomen dat een download per ongeluk een bestaand bestand overschrijft. Aan de tweede en volgende downloads van hetzelfde bestand is een nummer toegevoegd om een ​​nieuwe en unieke naam te creëren die bestaande bestanden niet zal beschadigen. Maar curl heeft ook --remove-on-error, waarin staat dat u het zojuist gedownloade bestand moet verwijderen als er iets misgaat, om te voorkomen dat u gedeeltelijke of beschadigde bestanden achterlaat. Als je beide opties hebt gebruikt, zou een mislukte download van een bestand dat al bestond, onvolledige gegevens achterlaten in het nieuwe en unieke bestand (datgene met een nummer aan het einde), en ten onrechte het originele bestand verwijderen dat --no-clobber moest beschermen.

Wat te doen?

  • Update als je wilt krullen 7.83.1 als je kunt op uw eigen systemen. Als curl wordt geleverd als onderdeel van de distro van je besturingssysteem, zoals meestal het geval is op Windows, Macs en Linux, kun je waarschijnlijk een patch verwachten in de volgende geplande update. (Het feit dat geen van deze bugs kritiek is, en dat geen van hen "in het wild" is gezien, betekent dat nood- of out-of-band updates onwaarschijnlijk zijn.)
  • Als u een apparaat of ander netwerkapparaat heeft, neem contact op met uw leverancier om te zien of ze curl gebruiken (het is een goede gok dat ze dat doen) en, zo ja, wanneer u een update kunt verwachten.
  • Als u zelf softwareprojecten uitvoert, kijk eens naar de krul beveiligingsadviezen bladzijde. Het is een uitstekend voorbeeld van hoe beveiligingsupdates duidelijk, netjes en correct kunnen worden gedocumenteerd, met duidelijke Engelse uitleg en een handige lijst met het versienummer wanneer elke bug voor het eerst de codebase binnenkwam en wanneer deze was verholpen.

Het curl-project maakt het gemakkelijk om erachter te komen hoe bugs gemeld kunnen worden; vertelt wat u kunt verwachten als u deze meldt; en bevat zelfs een Security item in de vervolgkeuzelijst Documentatie menu, waardoor duidelijk wordt dat beveiligingsrapporten eersteklas burgers zijn in het ecosysteem voor softwareontwikkeling.

Een klein ding dat je kunt doen dat het curl-team nog niet heeft gedaan: voeg een . toe security.txt bestand, in een standaard formaat, op een standaard bekende plaats op uw website. Op die manier is er een canonieke plek, in een canoniek formaat, waar beveiligingsonderzoekers je officiële kanalen voor het melden van bugs kunnen vinden. U kunt de onze als voorbeeld gebruiken door te kijken naar: sophos.com/security.txt en bij sophos.com/.well-known/security.txt.

spot_img

Laatste intelligentie

spot_img

Chat met ons

Hallo daar! Hoe kan ik u helpen?