image

Kwetsbaarheid in netmask raakt duizenden applicaties en repositories

maandag 29 maart 2021, 17:39 door Redactie, 3 reacties

Een kwetsbaarheid in de veelgebruikte npm-package netmask raakt duizenden applicaties en repositories. Een beveiligingsupdate is inmiddels beschikbaar gemaakt. Netmask wordt gebruikt voor het verwerken of vergelijken van IPv4-adressen en Classless Inter-Domain Routing (CIDR)-blocks. Softwareplatform GitHub telt 279.000 respositories die er gebruik van maken.

Door het niet goed valideren van "octal strings" kan een ongeauthenticieerde remote aanvaller verschillende soorten aanvallen uitvoeren op packages en projecten die er gebruik van maken, zoals server-side request forgery (SSRF), remote file inclusion (RFI) en local file inclusion (LFI), aldus onderzoekers Victor Viale, Sick Codes, Kelly Kaoudis, John Jackson en Nick Sahler.

Ip-adressen kunnen in verschillende formaten worden weergegeven, bijvoorbeeld in een decimaal of octaal formaat. Meestal wordt het decimale formaat gebruikt. De kwetsbaarheid, CVE-2021-28918, doet zich voor bij decimale ip-adressen waar een 0 voor wordt geplaatst. Zo wordt ip-adres 127.0.0.1 normaal gebruikt voor localhost. Wanneer echter 0127.0.0.1 wordt gebruikt dan wordt dit vertaald naar 87.0.0.1.

Volgens de IETF-specificatie kunnen delen van een IPv4-adres als een octaal worden beschouwd als het adres met een 0 begint. Netmask negeert dit en gaat van het decimale formaat uit. Wanneer een applicatie wil controleren of een ip-adres binnen een bepaalde reeks hoort, gaat het fout met octale weergaven van IPv4-adressen.

"Een remote ongeauthenticeerde aanvaller kan lokale resources opvragen door middel van invoerdata 0177.0.0.1 (127.0.0.1), dat netmask als publiek ip-adres 177.0.0.1 beschouwt", aldus de onderzoekers. Die stellen dat een remote geauthenticeerde of ongeauthenticeerde aanvaller 0127.0.0.01 (87.0.0.1) als localhost kan opgeven, terwijl het eigenlijk een publiek ip-adres is waardoor LFI/RFI mogelijk wordt.

Tevens zou het mogelijk zijn om applicaties te omzeilen die netmask gebruiken om ip-adressen te filteren om te voorkomen dat die toegang tot een intranet, vpn of containers krijgen. Zo wordt 012.0.0.1 (10.0.0.1) door Netmask gezien als 12.0.0.1, wat weer een publiek ip-adres is. De kwetsbaarheid is aanwezig in netmask versie 1.1.0 en eerder en verholpen in versie 2.0.0.

Image

Reacties (3)
29-03-2021, 22:53 door Anoniem
Hmm... gebruikt Windows 10 ook netmask?

Microsoft Windows [Version 10.0.19042.870]
(c) 2020 Microsoft Corporation. Alle rechten voorbehouden.

>ping 0127.0.0.1

Pinging 87.0.0.1 with 32 bytes of data:
Reply from 87.0.0.1: bytes=32 time=52ms TTL=50
Reply from 87.0.0.1: bytes=32 time=49ms TTL=50
Reply from 87.0.0.1: bytes=32 time=50ms TTL=50
Reply from 87.0.0.1: bytes=32 time=49ms TTL=50

Ping statistics for 87.0.0.1:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 49ms, Maximum = 52ms, Average = 50ms

>nslookup 87.0.0.1

Name: host-87-0-0-1.retail.telecomitalia.it
Address: 87.0.0.1
30-03-2021, 09:47 door Anoniem
Of dit een risico is hangt er natuurlijk sterk vanaf waar je deze module precies voor gebruikt.
In veel situaties zal de input niet zijn in de vorm van een tekst string die van de gebruiker komt, en dan is er niks
aan de hand. Pas als je de module gebruikt om user input te verwerken dan moet je oppassen.

Overigens is het onderliggende probleem iets wat veel mensen zich niet realiseren en waar je heel rare problemen door
kunt krijgen. Zo heb ik bijvoorbeeld wel gezien dat mensen hosts files maakten met "netjes uitgevulde adressen":

192.168.178.001
192.168.178.002
...
192.168.178.007
192.168.178.008
192.168.178.009
192.168.178.010
etc

Dat ziet er mooi uit, en in primitieve software sorteert het beter, maar dit is dus FOUT.
Bepaalde software zal dit als decimaal interpreteren, andere (correcte) software als octaal en gaat dan de mist in.

Overigens is er nog wel meer wat veel mensen niet weten of verwachten: de . tekens in een IP adres zijn optioneel
en je mag een IP adres ook als 1 getal schrijven zonder te groeperen in 4 bytes. Het is dan gewoon een 32-bit integer.
Bijv 10.0.0.1 mag je schrijven als 167772161. Dat is hetzelfde adres.
Maar veel software zal dat niet snappen, en als je dan compares gaat doen kunnen er ook rare dingen gebeuren.
30-03-2021, 10:28 door Anoniem
Door Anoniem: Hmm... gebruikt Windows 10 ook netmask?

Microsoft Windows [Version 10.0.19042.870]
(c) 2020 Microsoft Corporation. Alle rechten voorbehouden.

>ping 0127.0.0.1

Pinging 87.0.0.1 with 32 bytes of data:

Dit is hoe het moet werken! Windows doet het hier correct.
Het probleem met Netmask is dat het die input als 127.0.0.1 zou interpreteren.
Reageren

Deze posting is gelocked. Reageren is niet meer mogelijk.