Podatność w sterowniku pgjdbc umożliwia ciche obniżenie poziomu uwierzytelnienia z SCRAM-SHA-256-PLUS (z channel binding) do zwykłego SCRAM-SHA-256, mimo że połączenie jest skonfigurowane z opcją channelBinding=require. Atakujący zdolny do przechwycenia połączenia TLS może w ten sposób pozbawić je ochrony przed atakami man-in-the-middle.
▸ Pokaż oryginał (EN)
pgjdbc is an open source postgresql JDBC Driver. In releases 42.7.4 through 42.7.11, channelBinding=require connections can be silently downgraded from SCRAM-SHA-256-PLUS with channel binding to plain SCRAM-SHA-256 without it, losing the man-in-the-middle protection the setting is meant to guarantee. An attacker who can intercept the TLS connection can trigger the downgrade with a certificate whose signature algorithm has no tls-server-end-point channel-binding hash, because the bundled com.ongres.scram:scram-client returns an empty byte array instead of failing and pgJDBC ScramAuthenticator checks only that the server advertised a PLUS mechanism, without rejecting the empty binding or checking that the negotiated mechanism uses channel binding. This issue is fixed in version 42.7.12.
Gdy serwer prezentuje certyfikat TLS oparty na algorytmie podpisu nieobsługującym skrótu tls-server-end-point channel-binding, biblioteka com.ongres.scram:scram-client zwraca pustą tablicę bajtów zamiast zgłosić błąd. Komponent ScramAuthenticator w pgjdbc sprawdza jedynie, czy serwer zadeklarował obsługę mechanizmu PLUS, lecz nie weryfikuje, czy puste binding jest akceptowalne ani czy faktycznie negocjowany mechanizm korzysta z channel binding. W efekcie połączenie przechodzi na SCRAM-SHA-256 bez channel binding, mimo jawnego żądania jego wymuszenia przez klienta.
Atakujący z możliwością przeprowadzenia ataku man-in-the-middle na połączenie TLS może zainicjować degradację mechanizmu uwierzytelnienia, co umożliwia podszywanie się pod serwer bazy danych oraz potencjalną manipulację danymi przesyłanymi w sesji.
Należy zaktualizować pgjdbc do wersji 42.7.12, w której problem został naprawiony. Dostępna jest również aktualizacja biblioteki com.ongres.scram:scram-client do wersji 3.3.
PostgreSQL JDBC Driver (pgjdbc) w wersjach od 42.7.4 do 42.7.11 włącznie, przy połączeniach skonfigurowanych z opcją channelBinding=require.
Podatność wymaga spełnienia dodatkowych warunków: atakujący musi być zdolny do przechwycenia połączenia TLS (atak man-in-the-middle), a serwer musi posługiwać się certyfikatem opartym na algorytmie podpisu bez obsługi skrótu tls-server-end-point channel-binding.
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:L/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:XPostgreSQL Jdbc Driver
APPPostgresql42.7.4 – 42.7.12 (bez)
Powiązane podatności
SQL Injection w PostgreSQL JDBC Driver (pgjdbc) — tryb SIMPLE
Zapis do dowolnych plików przez pgjdbc via loggerFile (przed 42.3.3)
pgjdbc is an open source postgresql JDBC Driver. From version 42.2.0 to before version 42.7.11, pgjdbc is vuln...
pgjdbc is an open source postgresql JDBC Driver. From 42.7.4 and until 42.7.7, when the PostgreSQL JDBC driver...
PostgreSQL JDBC Driver (PgJDBC for short) allows Java programs to connect to a PostgreSQL database using stand...