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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2025-22963 — CVE-2025-22963の概念実証エクスプロイト。Teedy v1.11におけるCSRF脆弱性で、ユーザー情報変更エンドポイントを介してアカウント乗っ取りを可能にします。 | Kitploit
ツール/GitHubGitHub/gmh5225/cve-2025-22963
脆弱性分析エクスプロイトウェブアプリケーション悪用ウェブセキュリティペネトレーションテスト認証
GitHubgmh5225/cve-2025-22963

CVE-2025-22963

CVE-2025-22963の概念実証エクスプロイト。Teedy v1.11におけるCSRF脆弱性で、ユーザー情報変更エンドポイントを介してアカウント乗っ取りを可能にします。

リポジトリを見る
1年前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

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

概要

Teedy v1.11 以下のバージョンにおけるクロスサイトリクエストフォージェリ(CSRF)の脆弱性により、リモートの攻撃者は、現在認証されているWebアプリケーション上でエンドユーザーに強制的にユーザー情報(ユーザー名、パスワードなど)を変更させることができます。

脆弱性

ユーザー情報変更エンドポイントは /api/user/:username です。
このエンドポイントは認可のためにCookie内のauth_tokenのみをチェックします。
auth_tokenの値は他のオリジンのWebサイトから使用される可能性があります。

root@kitploit:~
POST /api/user/admin HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0
Accept: application/json, text/plain, */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded;charset=utf-8
Content-Length: 173
Origin: http://localhost:8080
Connection: keep-alive
Referer: http://localhost:8080/
Cookie: auth_token=890b02eb-3e4b-4134-a523-56093a25952b
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Priority: u=0

username=admin&groups=administrators&email=admin%40example.com&totp_enabled=false&storage_quota=0&storage_current=0&disabled=false&password=superSecure&passwordconfirm=superSecure

したがって、エンドユーザーに /api/user/:username にリクエストを送信するWebサイトを訪問させることで、エンドユーザーの情報をリモート攻撃者の情報に変更できます。
ユーザー情報にはパスワードが含まれます。
これによりアカウント乗っ取りにつながる可能性があります。
この攻撃は、リモート攻撃者がエンドユーザーのユーザー名を知っている場合に実行可能です。
この攻撃は管理者ユーザーとゲストユーザーの両方に対して悪用可能です。
この状況では、攻撃者は被害者のユーザーのパスワードを攻撃者のパスワードに設定し、攻撃者のパスワードで被害者のユーザーにログインすることで、被害者のユーザーを乗っ取ることができます。

修正方法

この脆弱性を修正するには、/api/user/:username にリクエストする際にCSRFトークンを添付します。

root@kitploit:~
POST /api/user/admin HTTP/1.1

...

username=admin&groups=administrators&email=admin%40example.com&totp_enabled=false&storage_quota=0&storage_current=0&disabled=false&password=superSecure&passwordconfirm=superSecure&csrf_token=<randomly generated token>

これによりCSRF攻撃から保護されます。なぜなら攻撃者はCSRFトークンの値を知らないからです。
CSRFトークンを安全に使用するには、以下の手順に従ってください。

  1. ランダムに生成されたCSRFトークンをリクエストフォームに埋め込みます。
  2. CORS HTTPヘッダーを使用して、CSRFトークンが他のオリジンのWebサイトに漏洩するのを防ぎます。

まず、docs/docs-web/src/main/java/com/sismics/docs/rest/util ディレクトリに以下のファイルを作成します。

  • CSRFToken.java
  • RandomTokenGenerator.java CSRFToken.java
root@kitploit:~
package com.sismics.docs.rest.util;

import java.util.Map;
import java.util.HashMap;
import java.security.SecureRandom;
import com.sismics.docs.rest.util.RandomTokenGenerator;

/**
 * CSRF Token Class that manages users' CSRF Token
 */
public class CSRFToken {

    private static CSRFToken instance = new CSRFToken();
    private Map<String, String> tokenMap = new HashMap<String, String>();

    private CSRFToken() {}

    public static CSRFToken getInstance() {
        return instance;
    }

    public void setToken(String userName, String token) {
        tokenMap.put(userName, token);
    }

    public String getToken(String userName) {
        if (tokenMap.containsKey(userName)) {
            return tokenMap.get(userName);
        }
        // avoid using predictable string because bruteforcing this value could lead to bypass CSRF check
        return RandomTokenGenerator.generate();
    }

    public boolean validate(String userName, String token) {
        return this.getToken(userName).equals(token);
    }
}

RandomTokenGenerator.java

root@kitploit:~
package com.sismics.docs.rest.util;

import java.security.SecureRandom;
import java.lang.StringBuilder;
import java.lang.String;

/**
 * A token generator for CSRF Token
 */
public class RandomTokenGenerator {

    public static String generate() {
        byte[] bytes = new byte[16];
        SecureRandom rand = new SecureRandom();
        rand.nextBytes(bytes);
        StringBuilder sb = new StringBuilder();
        for (byte b : bytes) {
            sb.append(String.format("%02x", b));
        }
        return sb.toString();
    }
}

その後、以下のファイルを変更します。

  • docs/docs-web/src/main/webapp/src/app/docs/controller/settings/SettingsUserEdit.js
  • docs/docs-web/src/main/java/com/sismics/docs/rest/resource/UserResource.java UserResourceDiff1 UserResourceDiff2 SettingsUserEditDiff1 SettingsUserEditDiff2

参考文献

sismics - Teedy(https://github.com/sismics/docs)
portswigger - クロスサイトリクエストフォージェリ(CSRF)(https://portswigger.net/web-security/csrf)
Mozilla - アクセス制御シナリオの例(https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#examples_of_access_control_scenarios)

謝辞

脆弱性の報告方法を教えてくれた Ayato に感謝します。

ツールをダウンロード