FlawOpen

flawopen.com/AI Security/ghostjacking-ai-agent-poisoned-observability-logs-august-2026

● FlawOpen-Zuordnung: CWE-1427 · Redaktionelle Schwere: Mittel
Sicherheitsforschung · FlawOpen

GhostJacking: Logs und KI-Agenten

Forschung zeigt, wie manipulierte Telemetrie einen Agenten beeinflusst. Keine CVE, kein bestätigtes Opfer.[1], [2]

💡 Einfache Erklärung (ELI5)

Stellen Sie sich vor, eine Empfangskraft weist eine verdächtige Lieferung ab, kopiert aber den Absendervermerk in das Vorfallprotokoll. Später prüft eine Einsatzkraft eine echte Ticketnummer und eine tatsächliche Lücke in der DNS-Richtlinie der Testumgebung. Dann vertraut sie der vom Angreifer gewählten Adresse im selben Vermerk und ändert das öffentliche Adressbuch, das Browsern und E-Mail-Diensten den Weg zu den Unternehmensdiensten zeigt. Das Protokoll war ein Beleg, keine Berechtigung für die Änderung; eine separate Richtlinienprüfung und Freigabe müssen sie steuern.[1]

Kernkonzepte & Begriffe

GhostJacking
Bezeichnung von Tenet Security für Demonstrationen, bei denen angreiferkontrollierte Inhalte in Observability-Ereignissen einen damit verbundenen KI-Agenten beeinflussen. Es ist ein Forschungsbegriff, keine CVE.[1], [2]
Indirect prompt injection
Anweisungen, die in Daten eingebettet sind, die das Modell untersuchen soll, statt direkt vom Nutzer vorgegeben zu werden.[1], [2], [4]
Observability-Ereignis
Ein Log, Alarm, Trace oder Fehlerdatensatz, der Systemaktivitäten beschreibt. Manche Felder können Text aus einer externen Anfrage enthalten.[1], [2]
Unabhängige Autorisierung
Eine Richtlinienprüfung außerhalb des Modells, die Akteur, Ziel, angeforderte Änderung und Genehmigung prüft, bevor ein Tool eine folgenreiche Aktion ausführt.[2], [5]
CWE-1427
MITRE-Schwachstellenklasse für unzureichende Neutralisierung von Eingaben in LLM-Prompts. Dies ist FlawOpens konzeptionelle Zuordnung; Tenet, ngCERT und kein CVE-Datensatz haben sie GhostJacking zugewiesen.[4], [1], [2]
Redaktionelle Schwere
ngCERT stuft Risiko und Schaden der Warnung als hoch ein. FlawOpen bewertet diese Zusammenfassung als Mittel, weil die Demonstrationen einen Agenten mit passenden Integrationen und Änderungsrechten voraussetzen; ein betroffenes Opfer ist nicht bestätigt. Dies ist eine redaktionelle Einstufung, keine Herstellerbewertung.[2], [1]

Framework-Zuordnungen

Schritt-für-Schritt Angriffsablauf

Schritt 1

Ein Agent erhält Untersuchungsrechte

Tenets Forschung beschreibt Entwicklungs- oder Betriebsagenten, die mit Tools wie Cloudflare, Datadog und Sentry verbunden sind. Die relevante Voraussetzung ist, dass ein Agent externe Ereignisinhalte lesen und mit vorhandenen Rechten folgenreiche Aktionen ausführen kann.[1]

Schritt 2

Eine Anfrage wird als Beleg protokolliert

In Tenets Cloudflare-Demonstration blockiert eine WAF eine Anfrage, während ein vom Angreifer kontrolliertes Feld im Ereignisdatensatz erhalten bleibt. Auch eine blockierte Anfrage kann nicht vertrauenswürdigen Text hinterlassen, den ein Agent später liest.[1], [2]

Schritt 3

Plausible Telemetrie umgeht die Abwehr offensichtlicher Anweisungen

Tenet berichtet, dass offensichtliche Befehle in den Tests abgelehnt wurden. Die erfolgreiche Cloudflare-Demonstration nutzte stattdessen strukturierte, scannerähnliche Telemetrie mit Ticketreferenz, Compliance-Verweis und Messwert; der Agent überprüfte einige Angaben und vertraute anschließend ungeprüften, vom Angreifer kontrollierten DNS-Werten. Dies ist eine von Forschenden berichtete Demonstration indirekter Prompt-Injection und kein Beleg für einen realen Opferfall.[1], [2]

Schritt 4

Vorhandene Rechte machen aus Einfluss eine Auswirkung

Tenet berichtet, dass die kontrollierte Demonstration einen Agenten dazu brachte, DNS über ein eingebundenes Cloudflare-Tool zu ändern. Das Ergebnis hängt von den Rechten und der Konfiguration des Agenten ab; es belegt weder eine Kompromittierung von Cloudflare noch Angriffe auf Kundensysteme.[1]

Schritt 5

Eine separate Richtlinie kann die Änderung stoppen

Die Anwendung sollte den Vorschlag des Modells als nicht vertrauenswürdig behandeln. Ein serverseitiger Autorisierungsdienst muss Ressource und Änderung unabhängig prüfen, gegebenenfalls die Genehmigung einer berechtigten Person verlangen und die Entscheidung protokollieren, bevor die Anbieter-API aufgerufen wird.[2], [5]

Quellcode: Verwundbar vs. Sicher

Diese Ausschnitte sind Beispiele und stammen nicht aus dem verwundbaren oder korrigierten Quellcode eines genannten Produkts. Das unsichere Muster gibt einem Agenten, der nicht vertrauenswürdigen Ereignistext liest, direkten Zugriff auf ein Änderungstool. Das geschützte Muster trennt Vorschlag und Ausführung: Ein unabhängiger Dienst verbraucht eine einmalige, an Akteur und genaue Änderung gebundene Genehmigung und setzt die Richtlinie vor dem Anbieteraufruf durch. Die Akteuridentität stammt aus dem authentifizierten Serverkontext und nicht aus einem vom Aufrufer kontrollierten Feld; das Modell kann sie nicht wählen. Eine Prompt-Anweisung allein ist keine Autorisierungskontrolle. Produktiver Code muss zusätzlich Schemas, Tenant- und Ressourcenzugehörigkeit, Genehmigungsablauf, Schutz vor Wiederholung, dauerhafte Auditdaten und Anbieterfehler prüfen.[1], [2], [5]

VERWUNDBARE IMPLEMENTIERUNG
// Beispiel für eine unsichere Integration; kein Quellcode von Cloudflare, Datadog, Sentry oder Tenet.
async function investigate(event: EventRecord) {
  return agent.run({
    context: event.message,
    tools: [cloudflare.updateDnsRecord]
  });
}
GEHÄRTETER SICHERHEITS-PATCH
// Beispiel für eine Kontrollgrenze; das Modell darf vorschlagen, aber nicht autorisieren oder ausführen.
type DnsProposal = { zoneId: string; name: string; value: string };

async function proposeDnsChange(event: EventRecord): Promise<DnsProposal> {
  return agent.propose({ evidence: markUntrusted(event.message) });
}

async function applyDnsChange(
  proposal: DnsProposal,
  approvalId: string
) {
  const actorId = auth.requireAuthenticatedActorId();
  const validatedProposal = DnsProposalSchema.parse(proposal);
  const approval = await approvals.consumeOnce(approvalId, { actorId });
  if (!approval || approval.actorId !== actorId ||
      approval.zoneId !== validatedProposal.zoneId ||
      approval.name !== validatedProposal.name ||
      approval.value !== validatedProposal.value ||
      !policy.canChangeDns(actorId, validatedProposal.zoneId, validatedProposal.name)) {
    throw new Error('DNS change is not independently authorized');
  }
  // Im Fehlerfall abbrechen, wenn die Autorisierungsentscheidung vor der Änderung nicht protokolliert werden kann.
  await audit.record({ actorId, approvalId, action: 'dns-change', decision: 'authorized' });
  try {
    await cloudflare.updateDnsRecord(validatedProposal);
  } catch (error) {
    await audit.record({ actorId, approvalId, action: 'dns-change', outcome: 'provider-failed' });
    throw error;
  }
  await audit.record({ actorId, approvalId, action: 'dns-change', outcome: 'succeeded' });
}

Checkliste für Engineering & Systemsicherheit

Quellen

← AI Security Directory →