SAST
fremforge kjører OpenGrep på hver pull request og på standardbranchen i hvert repository. Det kjører på fremforges egne skannere, så det er ingen workflow-fil å legge til. En pull request får statusen fremforge/sast og en kommentar. Funnene vises under Sikkerhet › Funn › SAST (/<org>/_admin/security/findings/sast).
Språk
C, C++, C#, Go, Java, JavaScript og TypeScript, Kotlin, PHP, Python, Ruby, Rust, Scala, Swift og Bash.
Regler
Fire regelsett er bygget inn i skanner-imaget. Ingenting hentes mens en skanning kjører:
- GitLab sast-rules: bare regelmappene per språk, for C#, Go, Java, JavaScript, Python og Scala. De er MIT, bortsett fra Go-reglene, som er avledet fra gosec og er Apache-2.0;
- 0xdea-reglene for C og C++, MIT;
- fremforges egne regler, MIT, for JavaScript og TypeScript, Bash, PHP, Ruby, Rust, Kotlin og Swift;
- fremforges egne taint-regler, MIT, for Python, JavaScript og TypeScript, Java, C# og Go.
GitLab-repositoryet inneholder også innhold under andre lisenser, som fremforge ikke leverer. Byggingen av imaget beholder et sett på en tillatelsesliste, regelmappene per språk, og sletter resten. Deretter sjekker den hver fil den beholdt, og feiler hvis noen av dem har en annen lisens enn MIT, Apache-2.0 eller BSD.
Taint-regler
fremforges taint-regler følger data fra forespørsler der de kommer inn i koden din (en spørringsparameter, et skjemafelt, en header, en informasjonskapsel, en forespørselskropp) til der de kan gjøre skade, og rapporterer stien mellom dem. De dekker SQL-injeksjon, kommando- og kodeinjeksjon, path traversal, server-side request forgery, cross-site scripting og usikker deserialisering i Python, JavaScript og TypeScript, Java, C# og Go. De kjenner forespørselsobjektene i Flask, Django, FastAPI, aiohttp, Express, Koa, Hono, Next.js, Servlet, Spring, JAX-RS, ASP.NET Core, net/http, gin, echo og fiber. En verdi som passerer en sanitiserer på veien (HTML-escaping, reduksjon til et filnavn, en bundet SQL-parameter, en tallkonvertering), rapporteres ikke.
Hva de følger, og hva de ikke følger:
- data innenfor en funksjon, og mellom funksjoner i samme fil;
- ikke data som forlater én fil og kommer tilbake i en annen;
- ikke hvilken gren av en
ifsom kjører, eller hvilken nøkkel i et map eller indeks i en liste som holder en verdi: en verdi som er beskyttet av en sjekk som alltid slår til, kan fortsatt bli rapportert; - ingen modeller av tredjepartsbiblioteker ut over kildene, slukene og sanitisererne reglene navngir;
- test- og spec-filer holdes utenfor.
Hvert funn har med stien fra kilde til sluk. Reglene er på for fremforges egne organisasjoner og av for andre mens andelen falske positiver måles, og funnene deres vises, men blokkerer aldri en merge, uansett alvorlighetsgrad. Der et taint-funn og et funn fra en annen regel står på samme linje for samme svakhet (CWE), vises bare taint-funnet. Slå dem av eller på med innstillingen taint_rules under.
Dine egne regler
En organisasjon kan legge til sine egne OpenGrep-regler. fremforge/sast kjører dem sammen med de innebygde regelsettene på hver pull request og på standardbranchen i hvert repository, med samme modus og blokkeringsterskel, og på en pull request er det bare det den legger til som blokkerer.
Legg dem til under Sikkerhet › Policyer › SAST-regler, via API-et eller med Terraform (se under). Hver regel er YAML med nøyaktig én regel under rules:, og et testeksempel: kode regelen må finne.
rules:
- id: acme-no-eval
message: Do not pass data to eval(); use ast.literal_eval or a parser.
severity: ERROR
languages: [python]
pattern: eval(...)En regel må ha:
- en
idpå 2 til 63 små bokstaver, sifre og bindestreker, unik i organisasjonen (funnene vises somcustom/<id>); - en
message, enseverity(ERROR,WARNINGellerINFO, vist som High, Medium og Low) og 1 til 5languages: Bash, C, C++, C#, Dockerfile, generic, Go, HTML, Java, JavaScript, JSON, Kotlin, PHP, Python, Ruby, Rust, Scala, Swift, Terraform, TypeScript eller YAML; - et mønster:
pattern,patterns,pattern-eitherellerpattern-regex, ellermode: taintmedpattern-sourcesogpattern-sinks.
Bare nøkler for mønstre, metavariabler, taint, paths, fix, options og metadata er tillatt, så en regel kan ikke nå utenfor seg selv. YAML-ankere og -aliaser avvises. Høyst 50 regler per organisasjon, 16 KiB hver, med et testeksempel på høyst 16 KiB.
En lagret regel er Kontrolleres til skanneren har kjørt den med samme opengrep, i det samme avgrensede miljøet som skanningene dine, på regelens eget testeksempel. Den blir Aktiv når den kan parses, finner noe i eksempelet og blir ferdig innen 30 sekunder (5 sekunder per fil); ellers blir den Avvist, med årsaken. Bare en aktiv regel som ikke er slått av, kjører. Endrer du en regel eller eksempelet, sjekkes den på nytt; inntil da kjører den ikke. Du kan slå av en regel uten å slette den.
Funn fra reglene dine vises sammen med de innebygde, i sjekken på pull requesten og under Sikkerhet › Funn › SAST, merket Tilpasset med navnet på regelen. De blokkerer som innebygde funn: ut fra alvorlighetsgraden sammenlignet med blokkeringsterskelen under.
Reglene lagres i fremforge og kjøres derfra. Skanneren henter aldri regler fra en URL eller et register, og sjekken av en regel gjør ingen nettverkskall. Innstillingen custom_rules_url er pensjonert: den leses ikke lenger, og en annen verdi enn null eller "" avvises med custom-rules-url-removed.
API
GET /_app/api/v1/orgs/{org}/code-security/sast/custom-rules
GET /_app/api/v1/orgs/{org}/code-security/sast/custom-rules/{id}
POST /_app/api/v1/orgs/{org}/code-security/sast/custom-rules { "name": "No eval", "source": "<yaml>", "sample": "<code>", "enabled": true }
PUT /_app/api/v1/orgs/{org}/code-security/sast/custom-rules/{id}
DELETE /_app/api/v1/orgs/{org}/code-security/sast/custom-rules/{id}Listing krever findings:read; endringer krever policy:write. En ny eller endret regel kommer tilbake med status pending; skannerens vurdering setter den til valid eller invalid, med status_code (for eksempel no-match eller parse), status_detail (opengreps egen melding, når det finnes en) og status_reason (en setning). En regel API-et kan avvise før skanneren ser den, besvares med 400 og årsaken (for eksempel one-rule eller unknown-key); en id som allerede er brukt, gir duplicate-id, og regel nummer 51 gir limit-reached, begge 409. Hver endring står i revisjonsloggen.
Terraform og OpenTofu
Hver regel er en fremforge_sast_custom_rule (provider 0.5.0 og nyere). En apply venter på skannerens vurdering og feiler med årsaken når regelen avvises; sett wait_for_verdict = false for å hoppe over ventingen.
resource "fremforge_sast_custom_rule" "no_eval" {
org = "acme"
name = "No eval"
source = file("sast/no-eval.yaml")
sample = file("sast/no-eval.sample.py")
}custom_rules_url på fremforge_sast_settings er utfaset og sendes ikke lenger; fjern den.
Innstillinger
Under Sikkerhet › Funn › SAST, eller GET og PUT /_app/api/v1/orgs/{org}/code-security/sast/settings (PUT krever policy:write):
| Innstilling | Verdier | Standard |
|---|---|---|
| SAST enabled for this org | på, av | på |
| Block severity | info, warning, error: funn på eller over dette nivået får fremforge/sast til å feile | error |
Taint-regler (taint_rules) | default, on, off. default er på for fremforges egne organisasjoner og av for andre. Funnene deres blokkerer aldri | default |
Om en sjekk som feiler, blokkerer en merge, avhenger også av sjekkens modus under Sikkerhet › Prioriter › Sjekker for pull requests og av branchbeskyttelsen. På en pull request er det bare funn som pull requesten introduserer, som blokkerer: et funn som bare er flyttet til en annen linje, er ikke nytt.
Funn
Funnene rangeres etter sikkerhet i vurderingen, deretter alvorlighetsgrad, deretter om skanneren sporet data fra en kilde som brukerinndata fram til funnet, og deretter alder. Funn i tester, eksempler, tredjepartskode eller generert kode, og funn fra en regel folk ofte avviser, havner lenger ned; de avvises ikke. Avvis et funn med en begrunnelse, ett om gangen eller mange samtidig, eller med POST .../code-security/sast/findings/{id}/dismiss. Listen finnes også på GET /_app/api/v1/orgs/{org}/code-security/sast/findings.
AI-rettelser
For en kort liste med regler ber AI-rettelse organisasjonens egen AI-modell om en pull request med en rettelse. Den er av som standard; slå den på under Sikkerhet › Utbedre › AI-rettelse. Se AI-rettelser for SAST-funn.