Hoppa till huvudinnehållet

Regelbaserade fixar

Öppna fix-PR på ett hemlighetsfynd eller ett IaC-fynd öppnar en pull request som åtgärdar det. En fast regel gör ändringen, inte en modell:

  • Hemligheter: den hårdkodade inloggningsuppgiften ersätts med en läsning av en miljövariabel.
  • IaC: en egenskap på en resurs sätts till sitt säkra värde.

Knappen finns i kolumnen Åtgärd under Säkerhet › Fynd › Hemlighetsskanning och Säkerhet › Fynd › IaC. En person klickar på den för ett fynd i taget. Ingenting föreslås automatiskt, och det finns ingen inställning för att slå på det.

Ingenting lämnar fremforge

Ingen AI-modell är inblandad, så ingen kod skickas till någon leverantör och ingen AI-nyckel behövs. Filen läses från ditt repo vid den commit där fyndet togs upp, ändras i minnet, skannas om i fremforges egna skannrar och skrivs tillbaka som en branch i ditt repo. Posten för fix-begäran sparar id:n, antal och utfall, aldrig filen, diffen eller inloggningsuppgiften.

Hemligheter: läs från miljön

Inloggningsuppgiften som skannern hittade ersätts med en läsning av en miljövariabel, i samma uttryck:

SpråkBlir
Goos.Getenv("NAME"), med "os" tillagt bland importerna vid behov; en const på en rad blir en var
Pythonos.environ["NAME"], med import os tillagt vid behov
JavaScript, TypeScriptprocess.env.NAME

NAME tas från den variabel eller nyckel som värdet tilldelas, i versaler med understreck (apiToken blir API_TOKEN), och annars från regeln. JSX- och TSX-filer, och alla andra filtyper, får ingen fix: cellen visar ett streck, med orsaken för skärmläsare och vid hovring.

Ingen fix föreslås när inloggningsuppgiften inte ligger i en enda vanlig strängliteral på en rad: ett värde över flera rader, en mallsträng eller f-sträng, eller ett const-block i Go.

Att flytta inloggningsuppgiften gör den inte säker. Den finns fortfarande i repots historik. Pull requesten säger det, och när en giltighetskontroll har funnit att inloggningsuppgiften är aktiv är dess första rad ROTATE NOW: this credential is live. Pull requesten innehåller aldrig inloggningsuppgiften eller någon del av den. Rotera den där den utfärdades, och sätt sedan miljövariabeln överallt där koden körs.

IaC: en egenskap, ett säkert värde

Bara kontroller där en egenskap har ett enda säkert värde får en fix, i Terraform, CloudFormation och ARM-mallar:

KontrollEgenskap (Terraform / CloudFormation, ARM)Sätts till
AWS-0086 S3 public access block: blockera publika ACL:erblock_public_acls / BlockPublicAclstrue
AWS-0087 S3 public access block: blockera publik policyblock_public_policy / BlockPublicPolicytrue
AWS-0091 S3 public access block: ignorera publika ACL:erignore_public_acls / IgnorePublicAclstrue
AWS-0093 S3 public access block: begränsa publika bucketsrestrict_public_buckets / RestrictPublicBucketstrue
AZU-0008 Azure storage: endast HTTPS-överföringarenable_https_traffic_only eller https_traffic_only_enabled / supportsHttpsTrafficOnlytrue
AZU-0011 Azure storage: lägst TLS 1.2min_tls_version / minimumTlsVersionTLS1_2

AZU-0059 (säker överföring) åtgärdas via den av AZU-0008 och AZU-0011 som gäller på dess rad. Egenskapen måste redan vara skriven med sitt osäkra värde på den rad skannern rapporterade. En fix lägger aldrig till en egenskap eller en resurs. Alla andra kontroller visar ett streck i kolumnen Åtgärd; deras åtgärdstext beskriver vad som ska ändras.

Vad som kontrolleras innan en pull request finns

  • En fil, fyndets egen, och bara de rader regeln ändrar, plus en import för en hemlighetsfix.
  • Aldrig ett test, CI-konfiguration, CODEOWNERS, en undertryckningsfil eller ett beroendemanifest.
  • Syntaxkontroll: den ändrade filen måste kunna tolkas precis som innan (gofmt -e för Go, en kompilering för Python, en parsning för JavaScript och TypeScript), så att en fix inte kan bryta bygget genom sin syntax.
  • Omskanning: samma skanner och regler som fyndet (gitleaks för hemligheter, Trivy för IaC) körs på originalfilen och den ändrade filen. Fyndet måste finnas i originalet, vara borta ur den ändrade filen, och inget nytt fynd får dyka upp.

Pull requesten

  • Öppnas av organisationens AutoFix-bot, <org>-fremforge-bot-autofix, på en ny branch under autofix-rule/, med etiketten autofix. Den har ingen etikett ai-generated, eftersom ingen AI har gjort den.
  • Titeln är fix(security): read NAME from the environment in <path> för en hemlighet, eller fix(security): <check title> in <path> för IaC. Beskrivningen säger vad som ändrats, hur det kontrollerats och vad du bör kontrollera innan merge.
  • Aktiveras aldrig för auto-merge. Dina obligatoriska godkännanden och kontroller gäller som för vilken pull request som helst. En person granskar och mergar den.

Gränser

  • En aktiv begäran per fynd. Fråga igen efter 10 minuter om en begäran avslutades utan en pull request.
  • Högst 3 öppna regelbaserade fix-pull requests per repo och 20 begäranden per organisation under 24 timmar. De använder samma inställningar som AI-fix, med en egen räknare. Sätter du dem till 0 stängs regelbaserade fixar av.
  • Ett fynd som tagits upp av pull request-kontrollen finns bara på den pull requestens branch: åtgärda det i själva pull requesten.

API

  • Begär en fix POST /_app/api/v1/orgs/{org}/code-security/secrets/findings/{id}/fix eller POST /_app/api/v1/orgs/{org}/code-security/iac/findings/{id}/fix, scope findings:write. Svarar 202 med request_id, status: "locating", engine: "rule" och "automerge": false; pull requesten följer inom några minuter. Ett avslag är problem+json med type rule-fix-<reason> och en reason, till exempel rule-fix-check-not-supported eller rule-fix-already-proposed, som också innehåller den befintliga begäran.
  • Lista fix-begäranden GET /_app/api/v1/orgs/{org}/code-security/fix-requests, scope findings:read: typ, regel, status, orsak, pull request, ändrade rader och tider. En begäran som avslutades utan pull request anger varför, till exempel secret_in_template, iac_shape_not_supported, rescan_patched_syntax eller rescan_finding_still_present.

Granskning

Begäranden finns i granskningsloggen som autofix.proposed, autofix.pr_opened, autofix.rejected, autofix.merged och autofix.closed, med engine: rule.

Se även