image

Duizenden npm-packages dankzij verlopen domeinnamen over te nemen

maandag 14 februari 2022, 10:29 door Redactie, 13 reacties

Duizenden npm-packages zijn dankzij verlopen domeinnamen over te nemen, zo hebben onderzoekers ontdekt. Npm is de standaard package manager voor de JavaScript-omgeving Node.js en naar eigen zeggen het grootste softwarearchief ter wereld. Npm-packages worden beheerd door maintainers.

Onderzoekers van NC State University en Microsoft analyseerde de metadata van 1,63 miljoen npm-packages. Ze vonden ruim 2800 e-mailadressen van maintainers die aan verlopen domeinnamen waren gekoppeld. Via deze verlopen domeinnamen is het mogelijk om 8500 npm-packages over te nemen.

Een aanvaller zou de verlopen domeinnamen kunnen registreren. Vervolgens een wachtwoordreset voor het maintainer-account uitvoeren en zo het npm-package in handen kunnen krijgen als de maintainer geen tweefactorauthenticatie (2FA) heeft ingesteld. In 2020 bleek dat meer dan negentig procent van npm-ontwikkelaars geen 2FA gebruikte om het eigen account te beveiligen.

Npm-packages kunnen weer door allerlei andere software worden gebruikt, waardoor een gekaapt npm-package grote gevolgen kan hebben. De onderzoekers hebben een overzicht van alle maintainer-accounts waarvan het domein is verlopen en te koop wordt aangeboden gedeeld met het npm-securityteam, zodat de accounts kunnen worden geblokkeerd.

Het probleem met verlopen domeinnamen is niet het enige probleem voor de veiligheid van npm-packages. Zo werden tienduizenden packages gevonden die van installatiescripts gebruikmaken die voor het uitvoeren van malafide commando's zijn te gebruiken, wat in strijd is met best practices. Verder hebben sommige maintainers controle over een groot aantal packages en worden sommige packages weer door veel personen beheerd, wat tot kwetsbaarheden of opzettelijk toegevoegde malafide code kan leiden.

Image

Reacties (13)
14-02-2022, 11:30 door Anoniem
Is er eigenlijk een voor iedereen toegankelijk en snel mechanisme om the weten of een domein verlopen is?
Er is altijd al "whois" geweest maar dit is niet bruikbaar omdat je niet duizenden whois queries per dag kunt doen zonder
geblokkeerd te worden.
En een DNS lookup doen zegt in feite ook niks.
Maar er zijn wel van die domeinkapers die binnen een paar minuten weten dat een domein verlopen is om het snel
te kunnen overnemen en tekoop zetten. Dus voor de incrowd is dit kennelijk wel mogelijk.
Als men bij NPM ook zo'n feed had zou men alle mail adressen waarvan het domein verlopen is meteen kunnen verwijderen
of in ieder geval markeren als niet meer geldig voor een wachtwoordreset.
En dat geldt ook wel voor andere situaties.
14-02-2022, 12:18 door Anoniem
Door Anoniem: Is er eigenlijk een voor iedereen toegankelijk en snel mechanisme om the weten of een domein verlopen is?
Er is altijd al "whois" geweest maar dit is niet bruikbaar omdat je niet duizenden whois queries per dag kunt doen zonder
geblokkeerd te worden.
En een DNS lookup doen zegt in feite ook niks.
Maar er zijn wel van die domeinkapers die binnen een paar minuten weten dat een domein verlopen is om het snel
te kunnen overnemen en tekoop zetten. Dus voor de incrowd is dit kennelijk wel mogelijk.
Als men bij NPM ook zo'n feed had zou men alle mail adressen waarvan het domein verlopen is meteen kunnen verwijderen
of in ieder geval markeren als niet meer geldig voor een wachtwoordreset.
En dat geldt ook wel voor andere situaties.
Tja scripts/php enzo. Er was zo'n webtool te vinden waar je je email in kon vullen en melding kreeg wanneer domein vrij is. Geen idee waar het kon. Denk dat je beste kunt vrager aan een webhost/domein service.
14-02-2022, 12:35 door S.A.T.A.N. - Bijgewerkt: 14-02-2022, 12:37
Duizenden npm-packages zijn dankzij verlopen domeinnamen over te nemen.

Wauw, dat is wel ernstig.

Npm is de standaard package manager voor de JavaScript-omgeving Node.js en naar eigen zeggen het grootste softwarearchief ter wereld. Npm-packages worden beheerd door maintainers.

JavaScript, dus scriptkiddies. Maar dan nog is het ernstig want die vormen tegenwoordig de hoofdmoot van de beschikbare resources en als je die de vrije teugel geeft dan krijg je dit soort toestanden. :-(
14-02-2022, 13:11 door Anoniem
Sinkholers hebben deze informatie ook.
14-02-2022, 13:17 door Anoniem
Door Anoniem: Is er eigenlijk een voor iedereen toegankelijk en snel mechanisme om the weten of een domein verlopen is?
DNS-lookups. Linux, commandline:

$ host -t MX security.nl
security.nl mail is handled by 10 mx1.certifiedsecure.com.
$ host -t MX invalid.domain
Host invalid.domain not found: 3(NXDOMAIN)

Door MX-records op te vragen richt je je specifiek op email-domeinen (MX=Mail eXchange, geloof ik). Het eerste commando (domein gevonden) geeft exitcode 0 af, het tweede (domein niet gevonden) exitcode 1.

Het is niet moeilijk om een script te maken dat op basis hiervan controleert of de domeinen in een lijst met e-mailadressen wel bestaan.
14-02-2022, 13:27 door Anoniem
Door Anoniem: Tja scripts/php enzo. Er was zo'n webtool te vinden waar je je email in kon vullen en melding kreeg wanneer domein vrij is. Geen idee waar het kon. Denk dat je beste kunt vrager aan een webhost/domein service.
Uiteraard wil je liever niet al je e-mail adressen de hele tijd pollen, maar een feed ontvangen van domeinen die
gederegistreerd worden. Zo moeten die domeinkapers dat ook doen, het is ondoenlijk om alle domeinen te pollen om
te zien of ze vrijgekomen zijn. En zelfs in Nederland wordt ieder vrijgekomen domein meteen geregistreerd, ondanks
dat SIDN zegt dat ze deze informatie niet aan derden verkopen.
14-02-2022, 15:51 door Anoniem
Door Anoniem:
Door MX-records op te vragen richt je je specifiek op email-domeinen (MX=Mail eXchange, geloof ik). Het eerste commando (domein gevonden) geeft exitcode 0 af, het tweede (domein niet gevonden) exitcode 1.

Hoewel het niet gebruikelijk is ben je hiermee niet compleet; een domein hoeft geen MX record te hebben om mail te kunnen ontvangen. Er is juist een specifieke MX record die aangeeft dat het domein *geen* mail ontvangt (met "0 ." als waarde).

Daarnaast geeft de aanwezigheid van specifieke records niet aan of de domeinnaam zelf geregistreerd is, en wanneer. Daar kun je beter whois voor gebruiken.

Maar dan nog weet je niet of een domeinnaam verlopen is *geweest*, en dat is het probleem hier. Zulke informatie is achter niet echt goed op te halen. Eigenlijk komt het erop neer dat als je een domeinnaam in gegevens van een package gebruikt je deze domeinnaam voor altijd moet laten bestaan. Tenzij er in de package ecosystemen ooit iets gaat komen om die wereldwijd 'terug' te trekken, maar op de lijst van problemen in package ecosystemen is er heel wat laaghangender fruit voorlopig.
14-02-2022, 16:15 door Power2All
Door Anoniem:
Door Anoniem: Is er eigenlijk een voor iedereen toegankelijk en snel mechanisme om the weten of een domein verlopen is?
Er is altijd al "whois" geweest maar dit is niet bruikbaar omdat je niet duizenden whois queries per dag kunt doen zonder
geblokkeerd te worden.
En een DNS lookup doen zegt in feite ook niks.
Maar er zijn wel van die domeinkapers die binnen een paar minuten weten dat een domein verlopen is om het snel
te kunnen overnemen en tekoop zetten. Dus voor de incrowd is dit kennelijk wel mogelijk.
Als men bij NPM ook zo'n feed had zou men alle mail adressen waarvan het domein verlopen is meteen kunnen verwijderen
of in ieder geval markeren als niet meer geldig voor een wachtwoordreset.
En dat geldt ook wel voor andere situaties.
Tja scripts/php enzo. Er was zo'n webtool te vinden waar je je email in kon vullen en melding kreeg wanneer domein vrij is. Geen idee waar het kon. Denk dat je beste kunt vrager aan een webhost/domein service.

PHP heeft niks met NodeJS te maken...
Het zijn pakketten van NodeJS die gehijacked kunnen worden door verlopen domein namen.
Dat is iets heel anders dan bijv. bij een PHP Composer repository, waar alles in Github zit.
14-02-2022, 16:20 door Anoniem
Door Anoniem:
Door Anoniem: Is er eigenlijk een voor iedereen toegankelijk en snel mechanisme om the weten of een domein verlopen is?
DNS-lookups.
DNS-lookups zeggen niks over of een domein verlopen is, zeker MX lookups niet (dan kun je nog beter NS lookups doen dat zegt dan nog iets meer), en omdat een verlopen domein meestal meteen geregistreerd wordt door een domeinkaper zegt het zelfs helemaal NIKS als je niet ook nog de "gelukte" DNS lookups die verwijzen naar zo'n domeinkaper er weer uitfiltert en net o behandelt als een lookup error.
14-02-2022, 16:22 door Anoniem
Door Anoniem:
Door Anoniem: Tja scripts/php enzo. Er was zo'n webtool te vinden waar je je email in kon vullen en melding kreeg wanneer domein vrij is. Geen idee waar het kon. Denk dat je beste kunt vrager aan een webhost/domein service.
Uiteraard wil je liever niet al je e-mail adressen de hele tijd pollen, maar een feed ontvangen van domeinen die
gederegistreerd worden. Zo moeten die domeinkapers dat ook doen, het is ondoenlijk om alle domeinen te pollen om
te zien of ze vrijgekomen zijn. En zelfs in Nederland wordt ieder vrijgekomen domein meteen geregistreerd, ondanks
dat SIDN zegt dat ze deze informatie niet aan derden verkopen.

WHOIS informatie bevat de expiration date. Op basis daarvan kun je een script aftrappen dat dat domein probeert te registreren. Faalt het: dan is het domein verlengd. Loopt het door: dan is het domein nu van de cybersquatter.
GoDaddy (een van de grootste domain registrars) heeft hier zelfs een API voor: https://developer.godaddy.com/doc/endpoint/domains

Leuker kunnen ze het niet maken. En gemakkelijker ook al niet.
14-02-2022, 18:43 door Anoniem
Door Anoniem:
Door Anoniem:
Door Anoniem: Tja scripts/php enzo. Er was zo'n webtool te vinden waar je je email in kon vullen en melding kreeg wanneer domein vrij is. Geen idee waar het kon. Denk dat je beste kunt vrager aan een webhost/domein service.
Uiteraard wil je liever niet al je e-mail adressen de hele tijd pollen, maar een feed ontvangen van domeinen die
gederegistreerd worden. Zo moeten die domeinkapers dat ook doen, het is ondoenlijk om alle domeinen te pollen om
te zien of ze vrijgekomen zijn. En zelfs in Nederland wordt ieder vrijgekomen domein meteen geregistreerd, ondanks
dat SIDN zegt dat ze deze informatie niet aan derden verkopen.

WHOIS informatie bevat de expiration date.

Ja maar dat zegt niks! Het kan voor die tijd opgezegd worden.
Bovendien je wilt geen whois doen van alle domeinen waarop je mail adressen hebt, zeker niet in een bestaand systeem.
Na een stuk of 20 queries ben je gebanned door de whois server.
14-02-2022, 20:26 door Anoniem
Dus.. 2FA op de domeinnamen van de ontwikkel accounts is een goed idee volgens Microsoft? Zodat niemand sneaky je domeinnaam kan kapen door daarvan de credentials te raden? En daarmee je npm-packages?

Is het ook een idee om domeinnamen niet opnieuw uit te geven? Zoals het eigenlijk ook met e-mail adressen van mail providers zou moeten? Zodat ze niet door iemand anders gekaapt kunnen worden?

En telefoonnummers ook maar meteen? Zodat je niet met de troep van de vorige eigenaar opgescheept zit?
15-02-2022, 07:32 door Anoniem
Door Anoniem: Dus.. 2FA op de domeinnamen van de ontwikkel accounts is een goed idee volgens Microsoft? Zodat niemand sneaky je domeinnaam kan kapen door daarvan de credentials te raden? En daarmee je npm-packages?

Is het ook een idee om domeinnamen niet opnieuw uit te geven? Zoals het eigenlijk ook met e-mail adressen van mail providers zou moeten? Zodat ze niet door iemand anders gekaapt kunnen worden?

En telefoonnummers ook maar meteen? Zodat je niet met de troep van de vorige eigenaar opgescheept zit?
Als je het bekijkt vanuit een security POV, dan is er niets aan de hand. De verlopen packages, als je die MOET gaan gebruiken, tja, dan is forken natuurlijk de beste optie, maar twee keer nadenken lijkt mij een veel betere optie. EN laten we eerlijk zijn, JS is gewoon een k*t taal, met zoveel sh*t erin. Je kan jouw code veel beter converteren naar TS.
Reageren

Deze posting is gelocked. Reageren is niet meer mogelijk.