Zafiyet Ozet Bilgileri

Zafiyet Kodu:CVE-2026-12047
Siddet Derecesi:4.8 | MEDIUM
Hedef Platform:
Yayinlanma Tarihi:18.06.2026 23:37

Zafiyet Detayi (Turkce)

pgAdmin 4'ün bulut dağıtım modülüne HTML enjeksiyonu. /rds/, /azure/, /google/ ve üst düzey /cloud/ blueprint altındaki valid_credentials, dağıtım, bölgeler ve güncelleme sunucusu uç noktaları, AWS / Azure / Google SDK istisna metnini ve ilgili dosya çözünürlüğü ve veritabanı taahhüt istisna metnini HTML kodlaması olmadan JSON yanıt gövdesine (bilgi ve hata mesajı alanları) yaydı. Bulut Sihirbazı ön ucu bu dizeleri html-react-parser aracılığıyla oluşturdu, böylece saldırganın etkilediği bir istisna mesajı yapısal HTML'yi doğrudan sihirbazın DOM'una yerleştirdi. Bildirilen giriş noktası /rds/verify_credentials/'dir. Kimliği doğrulanmış bir pgAdmin kullanıcısı, değeri bir <iframe/src=...> verisi içeren hazırlanmış bir erişim_anahtarı gönderir; AWS STS, metninde erişim_anahtarını aynen alıntılayan bir IncompleteSignature istisnasıyla kimlik bilgisini reddeder; pgAdmin arka ucu bu metni JSON bilgi alanına iletir; Bulut Sihirbazının FormFooterMessage'ı bunu HTML olarak ayrıştırır. Tarayıcı, iframe'in kaynağını saldırgan tarafından kontrol edilen bir ana bilgisayardan alır ve çapraz köken iframe içinde çalışan JavaScript, parent.location dosyasına yazarak kurbanın pgAdmin sekmesini yeniden yönlendirir. Enjeksiyon pgAdmin'in kendi arayüzü içinde işlendiğinden, X-Frame-Options ve Content-Security-Policy çerçeve ataları bunu hafifletmez. Temel etki kendi kendini hedef alır (yükü sağlayan aynı kullanıcı enjeksiyonu görür); Kimliği doğrulanmış diğer kullanıcılara karşı yükseltme, hatalı biçimlendirilmiş kimlik bilgisi talebini kurbanın tarayıcı bağlamında geçerli bir X-pgA-CSRFToken ile gönderebilen ek bir siteler arası istek sahteciliği ilkelini gerektirir. JSON'a yönelik aynı temizlenmemiş hata modeli, birden çok kardeş uç noktada mevcuttu - Azure'un check_cluster_name_availability'si, SDK hatalarını ortaya çıkaran her Google uç noktası (verification_ack, projeler, bölgeler, example_types, veritabanı_versions, doğrulama_credentials yol çözümleme dalları), str(e)'yi dağıtım_on_rds / dağıtım_on_azure /'den çıkaran merkezi /deploy uç noktası başarısız bir db.session.commit'ten str(e)'yi ortaya çıkaran konuşlandırma_on_google ve update_cloud_server - bunların hepsi artık kapsanmaktadır. psycopg3 sürücüsünden web/pgadmin/utils/text_sanitize.py dosyasına yükseltilen yeni bir paylaşılan sanitize_external_text yardımcı (kontrol karakteri şeridiyle HTML kaçışı) aracılığıyla uç nokta havuzundaki her harici/SDK istisna dizesini düzeltin. Bulut Sihirbazı ön ucu ayrıca, arka uçtan türetilmiş dizeler için FormFooterMessage'ı düz metin modunda işler, böylece gelecekteki bir havuz kaçışı unutsa bile değer hiçbir zaman HTML olarak ayrıştırılmaz. Bu sorun pgAdmin 4'ü etkilemektedir: 6.6'dan 9.16'ya.

Orijinal Aciklama (Ingilizce)

HTML injection in pgAdmin 4's cloud deployment module. The verify_credentials, deploy, regions, and update-server endpoints under /rds/, /azure/, /google/, and the top-level /cloud/ blueprint propagated AWS / Azure / Google SDK exception text — and the related file-resolution and database-commit exception text — into the JSON response body (the info and errormsg fields) without HTML-encoding. The Cloud Wizard frontend rendered these strings through html-react-parser, so an attacker-influenced exception message embedded structural HTML directly into the wizard's DOM. The reported entry point is /rds/verify_credentials/. An authenticated pgAdmin user submits a crafted access_key whose value contains an <iframe/src=...> payload; AWS STS rejects the credential with an IncompleteSignature exception whose text quotes the access_key verbatim; the pgAdmin backend forwards that text into the JSON info field; the Cloud Wizard's FormFooterMessage parses it as HTML. The browser fetches the iframe's src from an attacker-controlled host, and JavaScript executing inside the cross-origin iframe writes to parent.location, redirecting the victim's pgAdmin tab. Because the injection renders inside pgAdmin's own interface, X-Frame-Options and Content-Security-Policy frame-ancestors do not mitigate it. Baseline impact is self-targeted (the same user who supplied the payload sees the injection); escalation against other authenticated users requires an additional cross-site request-forgery primitive capable of submitting the malformed credential request with a valid X-pgA-CSRFToken in the victim's browser context. The same unsanitised-error-into-JSON pattern was present across multiple sibling endpoints — Azure's check_cluster_name_availability, every Google endpoint that surfaces SDK errors (verification_ack, projects, regions, instance_types, database_versions, the verify_credentials path-resolution branches), the central /deploy endpoint that bubbles str(e) from deploy_on_rds / deploy_on_azure / deploy_on_google, and update_cloud_server which surfaces the str(e) from a failing db.session.commit — all of which are now covered. Fix HTML-escapes every external/SDK exception string at the endpoint sink via a new shared sanitize_external_text helper (HTML escape with control-character strip), promoted out of the psycopg3 driver into web/pgadmin/utils/text_sanitize.py. The Cloud Wizard frontend additionally renders its FormFooterMessage in plain-text mode for backend-derived strings, so the value is never parsed as HTML even if a future sink forgets the escape. This issue affects pgAdmin 4: from 6.6 before 9.16.

Otomatik olarak ice aktarildi.Orijinal Kaynagi Goruntule