Regelbaserede rettelser
Åbn rettelses-PR på et fund af en secret eller et IaC-fund åbner en pull request, der retter det. Ændringen laves af en fast regel, ikke af en model:
- Secrets: den hårdkodede legitimationsoplysning erstattes af en læsning af en miljøvariabel.
- IaC: én egenskab på en ressource sættes til sin sikre værdi.
Knappen står i kolonnen Rettelse under Sikkerhed › Fund › Hemmelighedsscanning og Sikkerhed › Fund › IaC. En person klikker på den for ét fund ad gangen. Intet foreslås automatisk, og der er ingen indstilling, der slår det til.
Intet forlader fremforge
Der indgår ingen AI-model, så ingen kode sendes til nogen udbyder, og der er ikke brug for en AI-nøgle. Filen læses fra dit repository ved det commit, fundet blev rejst på, ændres i hukommelsen, scannes igen på fremforges egne scannere og skrives tilbage som en branch i dit repository. Registreringen af rettelsesanmodningen gemmer id’er, antal og udfaldet, aldrig filen, diffen eller legitimationsoplysningen.
Secrets: læs fra miljøet
Den legitimationsoplysning, scanneren fandt, erstattes af en læsning af en miljøvariabel i det samme udtryk:
| Sprog | Bliver til |
|---|---|
| Go | os.Getenv("NAME"), med "os" tilføjet til imports om nødvendigt; en const på én linje bliver til en var |
| Python | os.environ["NAME"], med import os tilføjet om nødvendigt |
| JavaScript, TypeScript | process.env.NAME |
NAME tages fra den variabel eller nøgle, værdien tildeles, skrevet i store bogstaver med understreger (apiToken bliver til API_TOKEN), og ellers fra reglen. JSX- og TSX-filer og alle andre filtyper får ingen rettelse: cellen viser en tankestreg, med begrundelsen til skærmlæsere og ved hover.
Der foreslås ingen rettelse, når legitimationsoplysningen ikke står i én almindelig strengliteral på én linje: en værdi over flere linjer, en template-streng eller f-streng eller en const-blok i Go.
At flytte legitimationsoplysningen gør den ikke sikker. Den ligger stadig i repositoriets historik. Det står i pull requesten, og når et gyldighedstjek har fundet legitimationsoplysningen aktiv, er første linje ROTATE NOW: this credential is live. Pull requesten indeholder aldrig legitimationsoplysningen eller nogen del af den. Rotér den ved kilden, og sæt derefter miljøvariablen overalt, hvor koden kører.
IaC: én egenskab, én sikker værdi
Kun tjek, hvor én egenskab har en enkelt sikker værdi, får en rettelse, i Terraform, CloudFormation og ARM-skabeloner:
| Tjek | Egenskab (Terraform / CloudFormation, ARM) | Sættes 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: kun HTTPS-overførsler | enable_https_traffic_only eller https_traffic_only_enabled / supportsHttpsTrafficOnly | true |
AZU-0011 Azure storage: mindst TLS 1.2 | min_tls_version / minimumTlsVersion | TLS1_2 |
AZU-0059 (sikker overførsel) rettes via den af AZU-0008 og AZU-0011, der gælder på dens linje. Egenskaben skal allerede stå med sin usikre værdi på den linje, scanneren rapporterede. En rettelse tilføjer aldrig en egenskab eller en ressource. Alle andre tjek viser en tankestreg i kolonnen Rettelse; deres afhjælpningstekst siger, hvad der skal ændres.
Hvad der tjekkes, før en pull request findes
- Én fil, fundets egen, og kun de linjer, reglen ændrer, plus en import ved en rettelse af en secret.
- Aldrig en test, CI-konfiguration,
CODEOWNERS, en undertrykkelsesfil eller et afhængighedsmanifest. - Syntakstjek: den patchede fil skal kunne parses, som den kunne før (
gofmt -efor Go, en kompilering for Python, en parsing for JavaScript og TypeScript), så en rettelse ikke kan ødelægge buildet med sin syntaks. - Genscanning: den samme scanner og de samme regler som fundet (gitleaks for secrets, Trivy for IaC) køres på den oprindelige og den patchede fil. Fundet skal være i den oprindelige fil og væk fra den patchede, og intet nyt fund må dukke op.
Pull requesten
- Åbnes af din organisations AutoFix-bot,
<org>-fremforge-bot-autofix, på en ny branch underautofix-rule/, med labelenautofix. Den har ingenai-generated-label, fordi ingen AI har lavet den. - Titlen er
fix(security): read NAME from the environment in <path>for en secret ellerfix(security): <check title> in <path>for IaC. Beskrivelsen fortæller, hvad der blev ændret, hvordan det blev tjekket, og hvad du skal tjekke før merge. - Sættes aldrig til automatisk merge. Dine påkrævede godkendelser og tjek gælder som for enhver anden pull request. En person reviewer og merger den.
Grænser
- Én aktiv anmodning pr. fund. Spørg igen efter 10 minutter, hvis en anmodning sluttede uden en pull request.
- Højst 3 åbne pull requests med regelbaserede rettelser pr. repository og 20 anmodninger pr. organisation inden for 24 timer. De bruger de samme indstillinger som AI-rettelse, med deres egen tæller. Sættes de til 0, slås regelbaserede rettelser fra.
- Et fund, der er rejst af tjekket på en pull request, findes kun på den pull requests branch: ret det i selve pull requesten.
API
- Anmod 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 inden for få minutter. Et afslag erproblem+jsonmedtyperule-fix-<reason>og enreason, fxrule-fix-check-not-supportedellerrule-fix-already-proposed, som også indeholder den eksisterende anmodning. - List rettelsesanmodninger
GET /_app/api/v1/orgs/{org}/code-security/fix-requests, scopefindings:read: type, regel, status, begrundelse, pull request, ændrede linjer og tidspunkter. En anmodning, der sluttede uden en pull request, oplyser hvorfor, fxsecret_in_template,iac_shape_not_supported,rescan_patched_syntaxellerrescan_finding_still_present.
Revision
Anmodninger står i revisionsloggen som autofix.proposed, autofix.pr_opened, autofix.rejected, autofix.merged og autofix.closed, med engine: rule.
Se også
- Hemmelighedsscanning og IaC-scanning: de fund, knappen sidder på.
- AI-rettelse: rettelser for en kort liste af SAST-regler, lavet af din organisations egen AI-model.
- Sikkerhedsrettelser: rettelser for sårbare afhængigheder og base-images.