Auf dieser Seite

KI-gestützte Angriffe nehmen rasant zu. Laut Google Threat Intelligence Report 2025 nutzen staatliche Akteure und kriminelle Gruppen KI inzwischen aktiv, um Schwachstellen schneller zu identifizieren und auszunutzen als je zuvor. Die mittlere Zeit von der Entdeckung einer Lücke bis zum ersten Exploit liegt 2025 bei unter 5 Tagen. Teams, die Security-Reviews manuell nachziehen, verlieren diesen Wettlauf strukturell. Dieser Artikel ist Teil der Run-Ressourcen zu KI-Betrieb und Compliance.

Dieser Artikel zeigt einen konkreten Gegenentwurf: eine CI-Pipeline, die Security-Probleme erkennt, selbst ein GitHub Issue öffnet, auf menschliche Freigabe wartet und dann per KI-Agent einen fertigen Pull Request erstellt. Live zeigbar. In bestehende Pipelines integrierbar.

Das Problem in zwei Zeilen Code

Das folgende Beispiel ist minimal und absichtlich verständlich gehalten. Es zeigt eine der häufigsten API-Schwachstellen überhaupt: Broken Object Level Authorization (BOLA) – OWASP API Security Risk #1.

# FastAPI-Endpunkt: eingeloggter Nutzer kann beliebiges Projekt abrufen
@app.get("/projects/{project_id}")
async def get_project(project_id: int, current_user: User = Depends(get_current_user)):
    return db.query(Project).filter(Project.id == project_id).first()

Ein authentifizierter Nutzer ruft GET /projects/42 auf. Das System prüft, ob er eingeloggt ist – aber nicht, ob das Projekt ihm gehört. Nutzer 1 sieht problemlos die Daten von Nutzer 2.

Der korrekte Fix ist drei Zeilen:

@app.get("/projects/{project_id}")
async def get_project(project_id: int, current_user: User = Depends(get_current_user)):
    project = db.query(Project).filter(Project.id == project_id).first()
    if not project or project.owner_id != current_user.id:
        raise HTTPException(status_code=403, detail="Kein Zugriff")
    return project

Genau das – Erkennung und automatisierter Fix – übernimmt die Pipeline.

Die vollständige Pipeline: Was passiert automatisch

Code-Push
    │
    ▼
CI läuft: Tests + Security Scan (Semgrep / Bandit)
    │
    ├─ kein Befund → Pipeline grün, fertig
    │
    └─ Befund → GitHub Issue wird automatisch angelegt
                    │
                    ▼
              CISO / Entwickler prüft Issue
                    │
                    └─ Genehmigung: Label "ai-fix-approved"
                            │
                            ▼
                      Container startet (Hetzner / GitHub Actions)
                            │
                            ▼
                      Claude analysiert Code + schreibt Fix
                            │
                            ▼
                      Pull Request wird automatisch erstellt
                            │
                            ▼
                      Mensch reviewed + merged

Der entscheidende Punkt: Der KI-Agent schreibt keinen Code ohne menschliche Freigabe. Die Eskalation von Befund zu PR läuft automatisch – die Entscheidung, ob der Fix eingespielt wird, bleibt beim Menschen.

Schritt 1: Security Scan in der CI

Eine GitHub Actions Workflow-Datei, die Semgrep und Bandit ausführt und bei Befunden automatisch ein Issue öffnet:

# .github/workflows/security-scan.yml
name: Security Scan

on:
  push:
    branches: [main, develop]
  pull_request:

jobs:
  security:
    runs-on: ubuntu-latest
    permissions:
      issues: write
      contents: read

    steps:
      - uses: actions/checkout@v4

      - name: Python Setup
        uses: actions/setup-python@v5
        with:
          python-version: "3.12"

      - name: Install Scanner
        run: pip install semgrep bandit

      - name: Semgrep OWASP Scan
        id: semgrep
        run: |
          semgrep --config=p/owasp-top-ten --json --output=semgrep-results.json . || true

      - name: Bandit Scan
        id: bandit
        run: |
          bandit -r . -f json -o bandit-results.json || true

      - name: Issue anlegen bei Befund
        if: always()
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          FINDINGS=$(python -c "
          import json, sys
          results = []
          try:
              with open('semgrep-results.json') as f:
                  data = json.load(f)
                  for r in data.get('results', []):
                      results.append(f\"- {r['check_id']} in {r['path']}:{r['start']['line']}\")
          except: pass
          try:
              with open('bandit-results.json') as f:
                  data = json.load(f)
                  for r in data.get('results', []):
                      if r['issue_severity'] in ['HIGH', 'MEDIUM']:
                          results.append(f\"- {r['test_id']}: {r['issue_text']} in {r['filename']}:{r['line_number']}\")
          except: pass
          if results:
              print('\n'.join(results))
          ")

          if [ -n "$FINDINGS" ]; then
            COMMIT="${{ github.sha }}"
            SHORT="${COMMIT:0:7}"
            gh issue create \
              --title "Security-Befund: Commit $SHORT" \
              --body "## Automatisch erkannte Sicherheitsprobleme

          Commit: \`$COMMIT\`
          Branch: \`${{ github.ref_name }}\`

          ### Befunde

          $FINDINGS

          ### Nächster Schritt

          Prüfe die Befunde. Wenn ein automatisierter Fix sinnvoll ist, setze das Label \`ai-fix-approved\`.
          Ein KI-Agent erstellt dann einen Pull Request mit dem Fix.

          > Dieses Issue wurde automatisch von der CI-Pipeline erstellt." \
              --label "security,needs-review"
          fi

Schritt 2: Der KI-Agent erstellt den Pull Request

Sobald ein Entwickler oder CISO das Label ai-fix-approved setzt, startet ein zweiter Workflow:

# .github/workflows/ai-security-fix.yml
name: AI Security Fix

on:
  issues:
    types: [labeled]

jobs:
  fix:
    if: github.event.label.name == 'ai-fix-approved'
    runs-on: ubuntu-latest
    permissions:
      contents: write
      pull-requests: write
      issues: write

    steps:
      - uses: actions/checkout@v4

      - name: Claude Fix generieren
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          pip install anthropic

          ISSUE_BODY="${{ github.event.issue.body }}"
          ISSUE_NUMBER="${{ github.event.issue.number }}"

          python - <<'EOF'
          import anthropic, subprocess, os, textwrap

          client = anthropic.Anthropic()

          # Relevante Dateien ermitteln
          diff = subprocess.check_output(["git", "diff", "HEAD~1"], text=True)

          issue_body = os.environ.get("ISSUE_BODY", "")

          prompt = textwrap.dedent(f"""
          Du bist ein Security-Engineer. Dir wurde folgendes Security-Issue gemeldet:

          {issue_body}

          Hier ist der aktuelle Code-Diff:

          {diff[:8000]}

          Analysiere die gemeldeten Schwachstellen und erstelle einen minimalen, korrekten Fix.
          Gib NUR den geänderten Dateiinhalt aus – keine Erklärung, kein Markdown.
          Format: DATEINAME\\n---\\n<vollständiger Inhalt>
          """)

          response = client.messages.create(
              model="claude-sonnet-4-6",
              max_tokens=4096,
              messages=[{"role": "user", "content": prompt}]
          )

          print(response.content[0].text)
          EOF

      - name: Branch erstellen und PR öffnen
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          BRANCH="security-fix/issue-${{ github.event.issue.number }}"
          git checkout -b "$BRANCH"
          git config user.name "Security Bot"
          git config user.email "security-bot@helm-nagel.com"

          # Fix-Dateien committen (aus vorherigem Schritt)
          git add -A
          git commit -m "fix: Security-Lücken aus Issue #${{ github.event.issue.number }} behoben

          Automatisch generierter Fix. Muss manuell reviewed und gemerged werden.

          Closes #${{ github.event.issue.number }}"

          git push origin "$BRANCH"

          gh pr create \
            --title "Security Fix: Issue #${{ github.event.issue.number }}" \
            --body "Automatisch generierter Sicherheits-Fix.

          Bitte Code-Review durchführen, bevor dieser PR gemerged wird.

          Closes #${{ github.event.issue.number }}" \
            --base main \
            --head "$BRANCH"

Was du dafür brauchst

GitHub ActionsEnthalten in GitHub Free
ANTHROPIC_API_KEYClaude API – ab $5/Monat nutzbar
SemgrepOpen Source, kostenfrei
Hetzner VPSOptional – für eigene Agent-Container

Die Pipeline läuft vollständig in GitHub Actions – kein eigener Server notwendig. Wer den Agenten auf eigener Infrastruktur betreiben möchte (z. B. für sensible Repositories oder Compliance-Anforderungen), kann den Container auf einem Hetzner VPS deployen: ein cx22 für ca. 4 Euro/Monat reicht für diese Workload.

Secrets einrichten:

# Einmalig im Repository konfigurieren
gh secret set ANTHROPIC_API_KEY --body "sk-ant-..."

# Labels anlegen
gh label create "security" --color "d93f0b"
gh label create "needs-review" --color "e4e669"
gh label create "ai-fix-approved" --color "0075ca"

Hinweis für Security-Verantwortliche: Penetrationstests

Diese Pipeline erkennt statische Schwachstellen zuverlässig – OWASP Top 10, bekannte Muster, Konfigurationsfehler. Sie ersetzt keinen Penetrationstest.

Für vollständige Pentests gilt in regulierten Umgebungen typischerweise der Vorbehalt, dass nur Anbieter aus der Shortlist zugelassener Vendors beauftragt werden dürfen. Wie Helm & Nagel mit DSGVO-konformer Infrastruktur und ISO 27001 die Basis dafür schafft, ist separat dokumentiert. Diese Einschränkung ist legitim. Die CI-Pipeline ist kein Vendor – sie ist interne Hygiene, die kontinuierlich und kostenlos läuft und dafür sorgt, dass Pentester keine Trivialprobleme mehr finden.

Die Kombination aus automatisierter CI-Security und regelmäßigen Pentests durch zugelassene Anbieter ergibt eine belastbare Verteidigungsstrategie.

Verwandte Security-Themen

Vertrauen und Sicherheit

ISO 27001, DSGVO, Vanta Trust Center: Wie Helm & Nagel Sicherheitsstandards → in der Praxis umsetzt – und was das für Ihre Daten bedeutet.

Cybersicherheit im KI-Zeitalter

OWASP Top 10 für LLM-Anwendungen →: Die spezifischen Risiken, wenn KI-Modelle selbst Teil der Angriffsfläche werden.

Menschliche Firewall

Technische Kontrollen allein reichen nicht. Wie Unternehmen Mitarbeitende → als aktive Verteidigungslinie aufbauen.

Cloud-Datenbanksicherheit

Best Practices für cloudbasierte Datenbanken → in regulierten Branchen – Verschlüsselung, Zugriffskontrolle, Audit-Logs.


Helm & Nagel implementiert Security-Pipelines dieser Art direkt in Ihre Entwicklungsumgebung – inkl. Konfiguration, Integration in bestehende CI/CD-Prozesse und Anbindung an Ihr Incident-Response-Verfahren. Wenn Sie sehen möchten, wie das in Ihrer konkreten Infrastruktur aussieht, sprechen wir das in einem ersten Gespräch durch.