Zum Hauptinhalt springen

Regelbasierte Korrekturen

Korrektur-PR öffnen bei einem Secret-Befund oder einem IaC-Befund öffnet einen Pull Request, der ihn behebt. Die Änderung nimmt eine feste Regel vor, kein Modell:

  • Secrets: Die fest codierten Zugangsdaten werden durch das Lesen einer Umgebungsvariablen ersetzt.
  • IaC: Eine Eigenschaft einer Ressource wird auf ihren sicheren Wert gesetzt.

Die Schaltfläche steht in der Spalte Fix unter Sicherheit › Befunde › Secret-Scanning und Sicherheit › Befunde › IaC. Eine Person klickt sie für einen einzelnen Befund. Nichts wird automatisch vorgeschlagen, und es gibt keine Einstellung, um das einzuschalten.

Nichts verlässt fremforge

Es ist kein KI-Modell beteiligt, also wird kein Code an einen Anbieter gesendet und kein KI-Schlüssel benötigt. Die Datei wird aus deinem Repository auf dem Stand des Commits gelesen, auf dem der Befund entstand, im Speicher geändert, auf den eigenen Scannern von fremforge erneut gescannt und als Branch in dein Repository zurückgeschrieben. Der Datensatz der Korrekturanforderung enthält IDs, Zählwerte und das Ergebnis, nie die Datei, den Diff oder die Zugangsdaten.

Secrets: aus der Umgebung lesen

Die Zugangsdaten, die der Scanner gefunden hat, werden im selben Ausdruck durch das Lesen einer Umgebungsvariablen ersetzt:

SpracheWird zu
Goos.Getenv("NAME"), bei Bedarf mit "os" in den Imports; ein einzeiliges const wird zu var
Pythonos.environ["NAME"], bei Bedarf mit import os
JavaScript, TypeScriptprocess.env.NAME

NAME wird aus der Variablen oder dem Schlüssel abgeleitet, dem der Wert zugewiesen ist, in Großbuchstaben mit Unterstrichen (apiToken wird zu API_TOKEN), sonst aus der Regel. JSX- und TSX-Dateien und alle anderen Dateitypen bekommen keine Korrektur: Die Zelle zeigt einen Strich, mit der Begründung für Screenreader und beim Überfahren mit der Maus.

Keine Korrektur wird vorgeschlagen, wenn die Zugangsdaten nicht in einem einfachen String-Literal auf einer Zeile stehen: ein mehrzeiliger Wert, ein Template-String oder f-String oder ein Go-const-Block.

Das Verschieben macht die Zugangsdaten nicht sicher. Sie stehen weiterhin in der Historie des Repositorys. Der Pull Request weist darauf hin, und wenn eine Gültigkeitsprüfung die Zugangsdaten als aktiv erkannt hat, lautet seine erste Zeile ROTATE NOW: this credential is live. Der Pull Request enthält nie die Zugangsdaten oder einen Teil davon. Rotiere sie an ihrer Quelle und setze dann die Umgebungsvariable überall dort, wo der Code läuft.

IaC: eine Eigenschaft, ein sicherer Wert

Eine Korrektur bekommen nur Checks, bei denen eine Eigenschaft genau einen sicheren Wert hat, in Terraform, CloudFormation und ARM-Templates:

CheckEigenschaft (Terraform / CloudFormation, ARM)Gesetzt auf
AWS-0086 S3 public access block: block public ACLsblock_public_acls / BlockPublicAclstrue
AWS-0087 S3 public access block: block public policyblock_public_policy / BlockPublicPolicytrue
AWS-0091 S3 public access block: ignore public ACLsignore_public_acls / IgnorePublicAclstrue
AWS-0093 S3 public access block: restrict public bucketsrestrict_public_buckets / RestrictPublicBucketstrue
AZU-0008 Azure storage: HTTPS-only transfersenable_https_traffic_only oder https_traffic_only_enabled / supportsHttpsTrafficOnlytrue
AZU-0011 Azure storage: minimum TLS 1.2min_tls_version / minimumTlsVersionTLS1_2

AZU-0059 (sichere Übertragung) wird über denjenigen der beiden Checks AZU-0008 und AZU-0011 behoben, der auf seiner Zeile zutrifft. Die Eigenschaft muss auf der vom Scanner gemeldeten Zeile bereits mit ihrem unsicheren Wert stehen. Eine Korrektur fügt nie eine Eigenschaft oder Ressource hinzu. Jeder andere Check zeigt in der Spalte Fix einen Strich; sein Behebungstext sagt, was zu ändern ist.

Was geprüft wird, bevor ein Pull Request entsteht

  • Eine Datei, die des Befunds selbst, und nur die Zeilen, die die Regel ändert, plus ein Import bei einer Secret-Korrektur.
  • Nie ein Test, eine CI-Konfiguration, CODEOWNERS, eine Unterdrückungsdatei oder ein Abhängigkeitsmanifest.
  • Syntaxprüfung: Die gepatchte Datei muss sich wie zuvor parsen lassen (gofmt -e für Go, eine Kompilierung für Python, ein Parse für JavaScript und TypeScript), damit eine Korrektur den Build nicht durch ihre Syntax brechen kann.
  • Erneuter Scan: Derselbe Scanner mit denselben Regeln wie beim Befund (gitleaks für Secrets, Trivy für IaC) läuft über die ursprüngliche und die gepatchte Datei. Der Befund muss in der ursprünglichen Datei vorhanden sein, in der gepatchten fehlen, und es darf kein neuer Befund auftauchen.

Der Pull Request

  • Geöffnet vom AutoFix-Bot deiner Organisation, <org>-fremforge-bot-autofix, auf einem neuen Branch unter autofix-rule/, mit dem Label autofix. Er trägt kein Label ai-generated, weil keine KI ihn erstellt hat.
  • Titel fix(security): read NAME from the environment in <path> bei einem Secret oder fix(security): <check title> in <path> bei IaC. Die Beschreibung sagt, was sich geändert hat, wie es geprüft wurde und was du vor dem Merge prüfen solltest.
  • Nie für Automerge scharfgeschaltet. Deine erforderlichen Freigaben und Checks gelten wie bei jedem Pull Request. Eine Person reviewt und mergt ihn.

Grenzen

  • Eine laufende Anforderung pro Befund. Frag nach 10 Minuten erneut an, wenn eine Anforderung ohne Pull Request endete.
  • Höchstens 3 offene Pull Requests mit regelbasierten Korrekturen pro Repository und 20 Anforderungen pro Organisation innerhalb von 24 Stunden. Es gelten dieselben Einstellungen wie bei der KI-Korrektur, mit eigenem Zähler. Setzt du sie auf 0, sind regelbasierte Korrekturen ausgeschaltet.
  • Ein Befund, den der Pull-Request-Check meldet, existiert nur auf dem Branch dieses Pull Requests: Behebe ihn im Pull Request selbst.

API

  • Eine Korrektur anfordern POST /_app/api/v1/orgs/{org}/code-security/secrets/findings/{id}/fix oder POST /_app/api/v1/orgs/{org}/code-security/iac/findings/{id}/fix, Scope findings:write. Antwortet mit 202 und request_id, status: "locating", engine: "rule" und "automerge": false; der Pull Request folgt innerhalb weniger Minuten. Eine Ablehnung ist problem+json mit dem type rule-fix-<reason> und einem reason, zum Beispiel rule-fix-check-not-supported oder rule-fix-already-proposed, das zusätzlich die bestehende Anforderung enthält.
  • Korrekturanforderungen auflisten GET /_app/api/v1/orgs/{org}/code-security/fix-requests, Scope findings:read: Art, Regel, Status, Grund, Pull Request, geänderte Zeilen und Zeitpunkte. Eine Anforderung, die ohne Pull Request endete, nennt den Grund, zum Beispiel secret_in_template, iac_shape_not_supported, rescan_patched_syntax oder rescan_finding_still_present.

Audit

Anforderungen stehen im Audit-Log als autofix.proposed, autofix.pr_opened, autofix.rejected, autofix.merged und autofix.closed, mit engine: rule.

Siehe auch