Regelbaserte rettelser
Åpne PR med rettelse på et secret-funn eller et IaC-funn åpner en pull request som retter det. En fast regel gjør endringen, ikke en modell:
- Secrets: det hardkodede legitimasjonselementet blir til en lesing av en miljøvariabel.
- IaC: én egenskap ved en ressurs settes til sin sikre verdi.
Knappen står i kolonnen Rettelse under Sikkerhet › Funn › Skanning etter secrets og Sikkerhet › Funn › IaC. En person klikker på den for ett funn om gangen. Ingenting foreslås automatisk, og det finnes ingen innstilling som slår det på.
Ingenting forlater fremforge
Ingen AI-modell er involvert, så ingen kode sendes til noen leverandør, og ingen AI-nøkkel trengs. Filen leses fra repositoryet ditt ved den commiten funnet ble meldt på, endres i minnet, skannes på nytt med fremforges egne skannere og skrives tilbake som en branch i repositoryet ditt. Posten for rettingsforespørselen beholder ID-er, antall og utfallet, aldri filen, diffen eller legitimasjonen.
Secrets: les fra miljøet
Legitimasjonen som skanneren fant, erstattes med en lesing av en miljøvariabel, i det samme uttrykket:
| Språk | Blir |
|---|---|
| Go | os.Getenv("NAME"), med "os" lagt til i importene om nødvendig; en const på én linje blir en var |
| Python | os.environ["NAME"], med import os lagt til om nødvendig |
| JavaScript, TypeScript | process.env.NAME |
NAME hentes fra variabelen eller nøkkelen som verdien tilordnes, i store bokstaver med understrek (apiToken blir API_TOKEN), eller ellers fra regelen. JSX- og TSX-filer, og alle andre filtyper, får ingen rettelse: cellen viser en strek, med begrunnelsen for skjermlesere og når du holder musepekeren over.
Ingen rettelse foreslås når legitimasjonen ikke står inne i én vanlig strengliteral på én linje: en verdi over flere linjer, en malstreng eller f-streng, eller en Go-const-blokk.
Å flytte legitimasjonen gjør den ikke trygg. Den ligger fortsatt i repositoryets historikk. Pull requesten sier dette, og når en gyldighetssjekk fant ut at legitimasjonen er aktiv, er den første linjen ROTATE NOW: this credential is live. Pull requesten inneholder aldri legitimasjonen eller noen del av den. Roter den hos kilden, og sett deretter miljøvariabelen der koden kjører.
IaC: én egenskap, én sikker verdi
Bare sjekker der én egenskap har én enkelt sikker verdi, får en rettelse, i Terraform, CloudFormation og ARM-maler:
| Sjekk | Egenskap (Terraform / CloudFormation, ARM) | Settes til |
|---|---|---|
AWS-0086 S3 public access block: block public ACLs | block_public_acls / BlockPublicAcls | true |
AWS-0087 S3 public access block: block public policy | block_public_policy / BlockPublicPolicy | true |
AWS-0091 S3 public access block: ignore public ACLs | ignore_public_acls / IgnorePublicAcls | true |
AWS-0093 S3 public access block: restrict public buckets | restrict_public_buckets / RestrictPublicBuckets | true |
AZU-0008 Azure storage: HTTPS-only transfers | enable_https_traffic_only eller https_traffic_only_enabled / supportsHttpsTrafficOnly | true |
AZU-0011 Azure storage: minimum TLS 1.2 | min_tls_version / minimumTlsVersion | TLS1_2 |
AZU-0059 (sikker overføring) rettes gjennom den av AZU-0008 og AZU-0011 som gjelder på linjen. Egenskapen må allerede være skrevet med sin usikre verdi på linjen som skanneren meldte. En rettelse legger aldri til en egenskap eller en ressurs. Alle andre sjekker viser en strek i kolonnen Rettelse; utbedringsteksten deres sier hva som skal endres.
Hva som sjekkes før en pull request finnes
- Én fil, funnets egen, og bare linjene som regelen endrer, pluss en import for en secret-rettelse.
- Aldri en test, CI-konfigurasjon,
CODEOWNERS, en undertrykkelsesfil eller et avhengighetsmanifest. - Syntakssjekk: den endrede filen må kunne parses som før (
gofmt -efor Go, en kompilering for Python, en parsing for JavaScript og TypeScript), så en rettelse kan ikke ødelegge bygget med sin syntaks. - Ny skanning: den samme skanneren og de samme reglene som for funnet (gitleaks for secrets, Trivy for IaC) kjøres på den opprinnelige og den endrede filen. Funnet må finnes i originalen, være borte fra den endrede filen, og ingen nye funn kan dukke opp.
Pull requesten
- Åpnes av organisasjonens AutoFix-bot,
<org>-fremforge-bot-autofix, på en ny branch underautofix-rule/, med etikettenautofix. Den har ingenai-generated-etikett, fordi ingen AI laget den. - Tittelen er
fix(security): read NAME from the environment in <path>for en secret, ellerfix(security): <check title> in <path>for IaC. Beskrivelsen sier hva som ble endret, hvordan det ble sjekket, og hva du bør sjekke før merge. - Settes aldri opp for automatisk merge. De påkrevde godkjenningene og sjekkene dine gjelder som for enhver pull request. En person går gjennom og merger den.
Begrensninger
- Én aktiv forespørsel per funn. Spør igjen etter 10 minutter hvis en forespørsel endte uten en pull request.
- Høyst 3 åpne pull requests med regelbaserte rettelser per repository og 20 forespørsler per organisasjon i løpet av 24 timer. Disse bruker de samme innstillingene som AI-rettelse, med sin egen teller. Setter du dem til 0, slås regelbaserte rettelser av.
- Et funn som pull request-sjekken meldte, finnes bare på den pull requestens branch: rett det i selve pull requesten.
API
- Be om en rettelse
POST /_app/api/v1/orgs/{org}/code-security/secrets/findings/{id}/fixellerPOST /_app/api/v1/orgs/{org}/code-security/iac/findings/{id}/fix, scopefindings:write. Svarer202medrequest_id,status: "locating",engine: "rule"og"automerge": false; pull requesten følger innen noen minutter. Et avslag erproblem+jsonmedtyperule-fix-<reason>og enreason, for eksempelrule-fix-check-not-supportedellerrule-fix-already-proposed, som også har med den eksisterende forespørselen. - List rettingsforespørsler
GET /_app/api/v1/orgs/{org}/code-security/fix-requests, scopefindings:read: type, regel, status, begrunnelse, pull request, endrede linjer og tidspunkter. En forespørsel som endte uten en pull request, sier hvorfor, for eksempelsecret_in_template,iac_shape_not_supported,rescan_patched_syntaxellerrescan_finding_still_present.
Revisjon
Forespørsler står i revisjonsloggen som autofix.proposed, autofix.pr_opened, autofix.rejected, autofix.merged og autofix.closed, med engine: rule.
Se også
- Secret-skanning og IaC-skanning: funnene som knappen står på.
- AI-rettelse: rettelser for en kort liste med SAST-regler, laget av organisasjonens egen AI-modell.
- Sikkerhetsrettelser: rettelser for sårbare avhengigheter og basisimager.