Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

FeedsKontaktDatenschutz© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
forgejo-hostmatcher-0001-ssrf — Forgejo 16.0.5 – Hoch – Remote – SSRF – hostmatcher erlaubt 0.0.0.1 als öffentliche IP | Kitploit
Tools/GitHubGitHub/abraxas/forgejo-hostmatcher-0001-ssrf
SchwachstellenanalyseExploitationWebanwendungs-ExploitationWebsicherheitPenetrationstestsRed TeamingLabs & Praxis
GitHubabraxas/forgejo-hostmatcher-0001-ssrf

forgejo-hostmatcher-0001-ssrf

Forgejo 16.0.5 – Hoch – Remote – SSRF – hostmatcher erlaubt 0.0.0.1 als öffentliche IP

Repository anzeigen
1vor 4 TagenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Abraxas Labs - forgejo-hostmatcher-0001-ssrf

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  forgejo-hostmatcher-0001-ssrf

forgejo-hostmatcher-0001-ssrf

Klasse: SSRF Reichweite: Remote

Forgejo 16.0.5 (8d24b7d) - Forgejo

Die Standardeinstellung [webhook] ALLOWED_HOST_LIST ist leer, daher baut services/webhook/deliver.go den Client mit dem eingebauten external auf. Dieses Prädikat ist Go IsGlobalUnicast() && !isPrivate(). isPrivate ist RFC1918/4193 plus der CGNAT-Ergänzung aus v16.0.2. RFC 6890 0.0.0.0/8 gehört zu keinem davon. 127.0.0.1 ist Loopback und wird verweigert. 0.0.0.1 ist erlaubt.

Ein angemeldeter Benutzer kann einen Webhook auf http://0.0.0.1 setzen und den HTTP-Body aus der Hook-Historie auslesen. 127.0.0.1 auf demselben Port wird verweigert.

IDnoch keine CVE
KlasseSSRF
ReichweiteRemote (authentifiziert; jeder Benutzer, der einen Repo-Webhook erstellen kann)
CWECWE-918
CVSSHoch: 7.7 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N
ProduktForgejo
Betroffenbis v16.0.5 (8d24b7d); Überbleibsel der CGNAT-Ergänzung aus v16.0.2
Authangemeldeter Benutzer, der einen Repo-Webhook erstellen kann
LizenzGNU Affero GPL v3.0
Labnur 127.0.0.1

Was ein Angreifer tun kann

Auf einer Standardinstallation registrieren, ein Repo erstellen, einen Forgejo-Webhook auf http://0.0.0.1:<port>/... setzen, ihn testen und den Response-Body auslesen.

BerechtigungMethode / SinkRecon / Integrität / VerfügbarkeitIm Lab bewiesen oder abgeleitet
Dieses-Netzwerk 0.0.0.1 an der Standard-Webhook-Allow-List vorbei wählenPOST /api/v1/repos/{owner}/{repo}/hooks dann POST .../hooks/{id}/tests mit URL http://0.0.0.1:8080/ssrfRecon (ausgehendes HTTP vom Forgejo-Host)Im Lab bewiesen. Historie speicherte HTTP 200 Body FORGEJO-HOSTMATCHER-0001-WITNESS
Die vollständige HTTP-Antwort von was auch immer geantwortet hat auslesenGET /{owner}/{repo}/settings/hooks/{id} gibt ResponseInfo.Body ausRecon (Full-Response-SSRF)Im Lab bewiesen. Derselbe Witness auf der Historienseite
Dieselbe Klasse über IPv4-gemapptes [::ffff:0.0.0.1]Derselbe Matcher To4() dann checkIPReconAbgeleitet aus hostmatcher. Lab verwendete 0.0.0.1
Einen Listener erreichen, der breiter als Loopback im Forgejo-Netns gebunden hatLinux connect() auf 0.0.0.0/8 ist dieser Host, sobald 0.0.0.1 auf lo liegtReconIm Lab gegen das Sidecar-Oracle bewiesen. Keine Aussage über ein bestimmtes Cloud-IMDS
Geschlossen beim selben Standard-Matcher: 127.0.0.1 (im Lab bewiesene Verweigerung in der Historie), 127.0.0.0/8, RFC1918, CGNAT 100.64.0.0/10, Link-Local 169.254.0.0/16 inklusive IPv4-IMDS, Unspecified 0.0.0.0. Der ausgehende Webhook erhält kein X-Forgejo-Internal-Auth / INTERNAL_TOKEN. Dies ist für sich genommen kein RCE.

Dies ist nicht der CGNAT-Fix aus v16.0.2. Forgejo hat nie eine Gitea-artige Reserved-Net-Liste bekommen. Dieselbe Klasse wie gitea-hostmatcher-0000-ssrf.

Wie ich es gefunden habe

v16.0.2 hat CGNAT in private aufgenommen. Patches, die eine Deny-List hinzufügen, sind ein Geschenk: Man liest die Liste und fragt dann, was IANA noch hat, das die Liste vergessen hat. Eine verwandte Suche behauptete, Go 1.26 IsGlobalUnicast hätte 0.0.0.1 geschlossen. Ich habe das Prädikat und die In-Tree-Tests geprüft. Sie decken 0.0.0.1 nie ab.

Bereits dokumentierte Irrwege: Webhook-Erstellung HTTP 201 als Oracle behandeln (die Historie ist das Oracle); erfolgreiche Zustellung an 127.0.0.1 (das wäre ein anderer Bug - das Lab erfordert, dass sie verweigert wird); /api/internal mit X-Forgejo-Internal-Auth ansprechen; eine Reverse Shell. Theater.

Lab

python3 forgejo-hostmatcher-0001-ssrf-Abraxas-Labs.py

oder:

cd lab
./run.sh

Ziel nur http://127.0.0.1:19320. Image codeberg.org/forgejo/forgejo:16.0.5. Oracle-Sidecar teilt den Forgejo-Netns auf Port 8080.

create-hook name=neg-loopback ...
negative-control 127.0.0.1 blocked
create-hook name=hit-0001 ...
poll id=2 witness=True
SUCCESS forgejo-hostmatcher-0001-ssrf how=live pin=v16.0.5 0.0.0.1:8080 HTTP 200 FORGEJO-HOSTMATCHER-0001-WITNESS

Der Fix

RFC 6890 0.0.0.0/8 als nicht-external behandeln (eine Reserved-Net-Liste, nicht IsGlobalUnicast). 0.0.0.1 muss genauso verweigert werden wie 127.0.0.1.

Referenzen

  • codeberg.org/forgejo/forgejo Tag v16.0.5
  • hostmatcher.go
  • In der Nähe gepatcht: v16.0.2 CGNAT
  • Dieselbe Klasse bei Gitea: gitea-hostmatcher-0000-ssrf
  • RFC 6890
  • CWE-918

Lizenz

GNU Affero GPL v3.0. Siehe LICENSE. Nur Loopback-Lab. Keine Gewährleistung.

Tool herunterladen