Kategorie: Security

  • Schluss mit –dangerously-skip-permissions – so geht es richtig

    Schluss mit –dangerously-skip-permissions – so geht es richtig

    Wer Claude Code regelmässig nutzt, kennt den Reflex: Das Projekt ist vertraut, die Bestätigungsdialoge nerven, also greift man zum grossen Hammer: --dangerously-skip-permissions. Schnell gestartet, Problem gelöst – bis es das nicht mehr ist.

    Dieser Post zeigt, warum es bessere Alternativen gibt und wie man Claude Code mit einem einzigen JSON-File so konfiguriert, dass man gar nicht mehr auf den Flag angewiesen ist.


    Was --dangerously-skip-permissions eigentlich macht

    Der Flag schaltet das gesamte Berechtigungssystem von Claude Code ab. Claude darf damit:

    • Jede Datei lesen und schreiben – ohne Nachfrage
    • Jeden Bash-Befehl ausführen – ohne Bestätigung
    • Auf alle Verzeichnisse zugreifen – keine Grenzen

    Das klingt nach Produktivität. In Wirklichkeit ist es ein Sicherheitsnetz, das man einfach wegwirft und das für jede Session, in der man ihn einsetzt.

    Das eigentliche Problem

    Der Flag ist eine Globallösung für ein Spezifitätsproblem. Man will eigentlich nur, dass Claude npm run build ohne Nachfrage ausführen kann und deaktiviert dafür das gesamte Berechtigungssystem. Das ist wie das Haustürschloss entfernen, weil man seinen Hausschlüssel nicht finden will.

    Dazu kommt: Der Flag gilt nur für diese eine Terminal-Session. Wer ihn vergisst, kämpft wieder mit Bestätigungsdialogen. Wer ihn standardmässig setzt (z.B. im Shell-Alias), trainiert sich selbst darauf, nie mehr über Berechtigungen nachzudenken.


    Die saubere Alternative: settings.json

    Claude Code hat ein vollständiges Berechtigungssystem über settings.json. Es existiert auf drei Ebenen:

    DateiScopeVersioniert?Wofür
    ~/.claude/settings.jsonGlobal – alle ProjekteNeinPersönliche Defaults
    .claude/settings.jsonProjekt – geteilt im TeamJaTeam-Permissions
    .claude/settings.local.jsonProjekt – lokalNein (gitignore)Persönliche Projekt-Overrides

    Schritt 1: Die richtigen Befehle explizit erlauben

    Statt alles zu erlauben, erlaubt man nur das, was man wirklich braucht:

    {
      "permissions": {
        "allow": [
          "Bash(npm:*)",
          "Bash(git:*)",
          "Bash(npx:*)",
          "Bash(pnpm:*)",
          "Edit(.claude)",
          "Read"
        ]
      }
    }
    

    Was das bedeutet:

    • Bash(npm:*) → Alle npm-Befehle dürfen ohne Nachfrage ausgeführt werden
    • Bash(git:*) → Alle git-Befehle sind freigeschaltet
    • Edit(.claude) → Claude darf den .claude/-Ordner eigenständig bearbeiten
    • Read → Alle Lesezugriffe sind erlaubt (kein Risiko)

    Schritt 2: Gefährliche Befehle explizit sperren

    Gleichzeitig kann man kritische Befehle dauerhaft sperren, unabhängig vom Modus:

    {
      "permissions": {
        "allow": ["Bash(npm:*)", "Bash(git:*)"],
        "deny": [
          "Bash(rm -rf:*)",
          "Bash(curl * | bash:*)",
          "Bash(sudo:*)"
        ]
      }
    }
    

    deny hat immer Vorrang vor allow. Selbst wenn man später aus Versehen einen zu breiten allow-Eintrag setzt, blockiert deny gezielt.


    Der neue auto-Modus: Kontrolliertes Vertrauen

    Mit dem neuen Auto-Modus von Claude geht das noch weiter. Statt statischer Listen entscheidet Claude selbst, basierend auf dem Kontext – ob eine Aktion sicher ist:

    {
      "permissions": {
        "defaultMode": "auto"
      }
    }
    

    Was der Auto-Modus macht:

    • Sichere Aktionen (Dateien lesen, bekannte CLI-Tools) → direkt ausführen
    • Potenziell riskante Aktionen → Nachfragen
    • Klar destruktive Aktionen → Immer blockieren

    Man kann den Auto-Modus mit eigenen Regeln kalibrieren:

    {
      "permissions": {
        "defaultMode": "auto",
        "allow": ["Bash(git:*)", "Bash(npm:*)"],
        "deny": ["Bash(sudo:*)", "Bash(rm -rf:*)"]
      },
      "autoMode": {
        "allow": [
          "Datenbankoperationen auf lokaler Dev-DB sind erlaubt",
          "Test-Runner (jest, vitest, pytest) dürfen direkt starten"
        ],
        "soft_deny": [
          "Keine Änderungen an Deployment-Konfigurationen ohne Nachfrage"
        ],
        "environment": [
          "Dies ist ein lokales Entwicklungs-Setup",
          "Keine Produktionssysteme erreichbar"
        ]
      }
    }
    

    Das ist ein fundamental anderer Ansatz: kein blindes Vertrauen, sondern kontextuelles Vertrauen.


    Für Projekte mit hohem Vertrauen: bypassPermissions

    Wer ein Projekt hat, das er vollständig kontrolliert und wo er wirklich keine Bestätigungen mehr will, zum Beispiel ein privates Skript-Repository, kann bypassPermissions als Projekt-Default setzen:

    // .claude/settings.local.json (nicht committen!)
    {
      "permissions": {
        "defaultMode": "bypassPermissions"
      }
    }
    

    Wichtige Unterschiede zu --dangerously-skip-permissions:

    --dangerously-skip-permissionsbypassPermissions in settings
    ScopeEinmalige Terminal-SessionPersistent für dieses Projekt
    EinstellbarNeinMit deny-Regeln kombinierbar
    Bewusste EntscheidungJedes Mal neu nötigEinmalig, dokumentiert
    Team-sichtbarNeinOptional via settings.json
    Kombination mit denyNeinJa – deny gilt immer

    Ein empfohlenes Setup

    Als Basis für meine lokalen Lab-Projekte nutze ich folgendes Setup in ~/.claude/settings.json (global):

    {
      "permissions": {
        "defaultMode": "auto",
        "allow": [
          "Bash(git:*)",
          "Bash(npm:*)",
          "Bash(npx:*)",
          "Bash(pnpm:*)",
          "Bash(node:*)",
          "Bash(python:*)",
          "Bash(ls:*)",
          "Bash(cat:*)",
          "Bash(echo:*)",
          "Read"
        ],
        "deny": [
          "Bash(sudo:*)",
          "Bash(rm -rf /)",
          "Bash(curl * | sh:*)",
          "Bash(wget * | sh:*)"
        ]
      }
    }
    

    Für spezifische Projekte mit höherem Automatisierungsbedarf (z.B. Build-Pipelines) kommt lokal ein .claude/settings.local.json dazu, das den Scope erweitert; nie aber global.


    Fazit

    --dangerously-skip-permissions ist der Notausgang, nicht die Lösung. Wer ihn regelmässig benutzt, hat ein Konfigurationsproblem – kein Berechtigungsproblem.

    Die settings.json erlaubt genau das, was man tatsächlich braucht:

    1. Spezifische Befehle freischalten statt alles erlauben
    2. Gefährliche Befehle sperren als permanente Guardrail
    3. Auto-Modus nutzen für kontextuelles, intelligentes Vertrauen
    4. bypassPermissions im Projekt für vollständig vertraute Umgebungen

    Die zehn Minuten, die man einmalig in die Konfiguration investiert, sparen hunderte Bestätigungsklicks und lassen das Sicherheitsnetz dort, wo es hingehört: im Hintergrund, nicht im Papierkorb.

  • Houston, We Got a Problem: Warum Vibe Coding dein grösstes Sicherheitsrisiko werden kann

    Houston, We Got a Problem: Warum Vibe Coding dein grösstes Sicherheitsrisiko werden kann

    Mit dem Vibe Coding Hype und dem raketenhaften Aufstieg von Claude Code, Codex und ganz neu Moltbot (ehem. Clawdbot) und Co. steigen auch die Sicherheitsrisiken dramatisch an. Und in der grossen Euphorie wird sogar Sam Altman selbst unvorsichtig.

    Ein Impuls an alle Early Adopters, die sich gerade in nächtlichen Coding-Rabbitholes befinden.

    Die YOLO-Falle: Wenn selbst der OpenAI-CEO nach zwei Stunden aufgibt

    Sam Altman hat es diese Woche in einem Developer-Q&A offen zugegeben: Er hatte sich vorgenommen, dem Codex-Modell keinen vollen Systemzugriff zu geben. Nach zwei Stunden hat er kapituliert.

    Seine Begründung? „The agent seems to really do reasonable things.“

    Seine Warnung? Wir alle werden in eine „YOLO“-Mentalität schlittern, bei der die Bequemlichkeit so gross und die Fehlerrate so niedrig erscheint, dass wir die potenziell katastrophalen Auswirkungen ausblenden. Altman befürchtet, dass die Gesellschaft „schlafwandelnd in eine Krise“ gerät, in der wir komplexen Modellen vertrauen, ohne die nötige Sicherheitsinfrastruktur aufgebaut zu haben.

    Die Permission-Fatigue ist real

    Die sekündlichen Notifications und Nachfragen nach Berechtigungen nerven. Man ist geneigt, nach der hundertsten Anfrage einfach klick, klack freizugeben. Das ist menschlich – aber gefährlich.

    Derzeit entsteht unheimlich viel Code, von dem niemand eine Ahnung hat, ganze Apps werden auf Cloud-Plattformen deployt, um deren Konfiguration sich niemand kümmert, Credentials wie API-Keys werden reihenweise in Klartext in Code und n8n-Automations geschrieben, Berechtigungen werden sorgenfrei à gogo vergeben – auf das lokale Filesystem, mittels Konnektoren auf Cloudspeicher, Email, Kalender usw.

    Das ist, als würdest du dir selbst 100 trojanische Pferde einladen.

    Moltbot: Das perfekte Beispiel für alles, was schiefgehen kann

    Der kürzlich umbenannte AI-Assistent Moltbot (vormals Clawdbot) zeigt exemplarisch die Risiken auf:

    Öffentlich exponierte Instanzen: Sicherheitsforscher Jamieson O’Reilly von Dvuln fand hunderte von Moltbot-Instanzen, die öffentlich im Internet erreichbar waren. Von den manuell untersuchten Instanzen hatten acht überhaupt keine Authentifizierung – voller Zugriff auf Befehle und Konfigurationsdaten für jeden.

    Credentials im Klartext: Hudson Rock hat den Moltbot-Code analysiert und festgestellt, dass manche Secrets in Klartext-Markdown- und JSON-Dateien auf dem lokalen Filesystem gespeichert werden. Infostealer-Malware wie Redline, Lumma und Vidar implementieren bereits Funktionen, um genau diese Verzeichnisstrukturen zu durchsuchen.

    Supply-Chain-Angriffe: O’Reilly konnte ein Proof-of-Concept demonstrieren: Er lud ein manipuliertes Skill-Paket in die ClawdHub-Bibliothek hoch, blähte die Download-Zahlen künstlich auf über 4’000 auf und beobachtete, wie Entwickler aus sieben Ländern das vergiftete Paket herunterluden. Die Bibliothek moderiert Uploads nicht – heruntergeladener Code wird automatisch als vertrauenswürdig behandelt.

    Die Warnung von Google: Heather Adkins, VP Security Engineering bei Google Cloud, warnt explizit: „Don’t run Clawdbot.“ Ein Sicherheitsforscher bezeichnete Moltbot als „Infostealer-Malware, die sich als AI Personal Assistant tarnt.“

    Die unbequeme Wahrheit: Eric Schwake von Salt Security bringt es auf den Punkt: Es gibt eine massive Lücke zwischen der „One-Click-Appeal“-Begeisterung der Konsumenten und dem technischen Know-how, das für einen sicheren Betrieb eines agentischen Gateways nötig wäre.

    Jamieson O’Reilly formuliert es noch drastischer:

    „Wir haben 20 Jahre damit verbracht, Sicherheitsgrenzen in moderne Betriebssysteme einzubauen – Sandboxing, Prozessisolation, Berechtigungsmodelle, Firewalls. All diese Arbeit wurde gemacht, um den Explosionsradius zu begrenzen und Fernzugriff auf lokale Ressourcen zu verhindern. AI Agents reissen all das per Design ein. Sie müssen deine Dateien lesen, auf deine Credentials zugreifen, Befehle ausführen und mit externen Services interagieren. Das Wertversprechen erfordert, Löcher durch jede Grenze zu schlagen, die wir über Jahrzehnte aufgebaut haben.“

    Impulse für Vibe Coder und Claude Coder

    Wer bislang noch keinen Plan hat, sollte sich unbedingt Gedanken machen. Hier sind einige Impulse aus der Security-Community:

    • Zero-Knowledge Cloud für sensible Daten: Ich nutze eine separate Cloud-Plattform ohne Konnektoren und APIs für wirklich wichtige Daten
    • Kein Mischen von produktiven Geschäftsdaten und Experimentier-Sandboxen
    • Verschlüsselte Backups an einem Ort, den kein AI-Agent erreichen kann
    • AI Agents haben nur Zugriff auf dedizierte Email-Konten, Kalender und Laufwerke
    • Niemals den Haupt-Google-Account oder primäres Microsoft 365 mit AI-Agents verbinden
    • Separate Browser für AI Plugins
    • Keine lokalen Server in Produktionsnetzwerken
    • AI-Assistenten niemals mit Firewall-Regeln spielen lassen
    • Ein separater Systembenutzer für alle Programmierexperimente
    • Regelmässiges Aufräumen dieses Sandbox-Bereichs • Keine Port-Freigaben nach aussen für experimentelle Services
    • Keine Passwort-Manager in AI-genutzten Browser-Profilen
    • Niemals API-Keys, Tokens oder Passwörter in Klartext im Code • Rotiere API-Keys regelmässig – besonders wenn sie in AI-generiertem Code verwendet wurden
    • Prüfe generierten Code immer auf hartcodierte Credentials
    • Regelmässige Backups – vor allem vor grösseren AI-gesteuerten Änderungen
    • Gib AI-Agents nur die Berechtigungen, die sie wirklich brauchen

    Fazit: Convenience ist der Feind von Security

    Sam Altman hat recht: Die Bequemlichkeit dieser Tools ist so verlockend, dass wir dazu neigen, alle Vorsicht über Bord zu werfen. Aber „YOLO“ ist keine Security-Strategie.

    Vibe Coding ist grossartig. Aber vibe responsibly.

    Weiterführende Links:

    The Register: Clawdbot becomes Moltbot, but can’t shed security concerns

    https://www.theregister.com/2026/01/27/clawdbot_moltbot_security_concerns/

    The Decoder: OpenAI CEO Altman admits he broke his own AI security rule after just two hours

    https://the-decoder.com/openai-ceo-altman-admits-he-broke-his-own-ai-security-rule-after-just-two-hours-says-were-all-going-yolo/