SAST
fremforge kör OpenGrep på varje pull request och på varje repos standardbranch. Det körs på fremforges egna skannrar, så det finns ingen arbetsflödesfil att lägga till. En pull request får statusen fremforge/sast och en kommentar. Fynden listas under Säkerhet › Fynd › SAST (/<org>/_admin/security/findings/sast).
Språk
C, C++, C#, Go, Java, JavaScript och TypeScript, Kotlin, PHP, Python, Ruby, Rust, Scala, Swift och Bash.
Regler
Fyra regeluppsättningar är inbyggda i skannerns image. Inget hämtas medan en skanning körs:
- GitLab sast-rules: bara dess regelmappar per språk, för C#, Go, Java, JavaScript, Python och Scala. De är MIT, utom Go-reglerna, som härstammar från gosec och är Apache-2.0;
- reglerna från 0xdea för C och C++, MIT;
- fremforges egna regler, MIT, för JavaScript och TypeScript, Bash, PHP, Ruby, Rust, Kotlin och Swift;
- fremforges egna taint-regler, MIT, för Python, JavaScript och TypeScript, Java, C# och Go.
GitLab-repot innehåller också material under andra licenser, som fremforge inte levererar. Bygget av imagen behåller en tillåtelselistad uppsättning, regelmapparna per språk, och raderar resten. Sedan kontrolleras varje fil som behölls, och bygget misslyckas om någon av dem har en annan licens än MIT, Apache-2.0 eller BSD.
Taint-regler
fremforges taint-regler följer data i en förfrågan från där den kommer in i din kod (en frågeparameter, ett formulärfält, en header, en cookie, en förfrågans brödtext) till där den kan göra skada, och rapporterar vägen mellan dem. De täcker SQL-injektion, kommando- och kodinjektion, path traversal, server-side request forgery, cross-site scripting och osäker deserialisering i Python, JavaScript och TypeScript, Java, C# och Go. De känner till förfrågeobjekten i Flask, Django, FastAPI, aiohttp, Express, Koa, Hono, Next.js, Servlet, Spring, JAX-RS, ASP.NET Core, net/http, gin, echo och fiber. Ett värde som passerar en sanerare på vägen (en HTML-escape, en reduktion till ett filnamn, en bunden SQL-parameter, en konvertering till tal) rapporteras inte.
Vad de följer, och vad de inte följer:
- data inom en funktion, och mellan funktioner i samma fil;
- inte data som lämnar en fil och kommer tillbaka i en annan;
- inte vilken gren av en
ifsom körs, eller vilken nyckel i en map eller vilket index i en lista som innehåller ett värde: ett värde som skyddas av en kontroll som alltid går igenom kan ändå rapporteras; - inga modeller av tredjepartsbibliotek utöver de källor, sänkor och sanerare som reglerna namnger;
- test- och spec-filer utelämnas.
Varje fynd innehåller vägen från källa till sänka. De är påslagna för fremforges egna organisationer och avstängda för andra medan deras andel falska positiva mäts, och deras fynd listas men blockerar aldrig en merge, oavsett allvarlighetsgrad. Där ett taint-fynd och ett fynd från en annan regel sitter på samma rad för samma svaghet (CWE) listas bara taint-fyndet. Slå på eller av dem med inställningen taint_rules nedan.
Dina egna regler
En organisation kan lägga till egna OpenGrep-regler. fremforge/sast kör dem tillsammans med de inbyggda regeluppsättningarna på varje pull request och på varje repos standardbranch, med samma läge och samma allvarlighetsgrad för blockering, och på en pull request blockerar bara det som den lägger till.
Lägg till dem under Säkerhet › Policyer › SAST-regler, via API:t eller med Terraform (nedan). Varje regel är YAML med exakt en regel under rules:, och ett testexempel: kod som regeln måste hitta.
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åste ha:
- ett
idpå 2 till 63 gemena bokstäver, siffror och bindestreck, unikt i organisationen (dess fynd visas somcustom/<id>); - ett
message, enseverity(ERROR,WARNINGellerINFO, som visas som Hög, Medel och Låg) och 1 till 5languages: Bash, C, C++, C#, Dockerfile, generic, Go, HTML, Java, JavaScript, JSON, Kotlin, PHP, Python, Ruby, Rust, Scala, Swift, Terraform, TypeScript eller YAML; - ett mönster:
pattern,patterns,pattern-eitherellerpattern-regex, ellermode: taintmedpattern-sourcesochpattern-sinks.
Bara nycklar för mönster, metavariabler, taint, paths, fix, options och metadata är tillåtna, så en regel kan inte nå utanför sig själv. YAML-ankare och alias avvisas. Högst 50 regler per organisation, 16 KiB vardera, med ett testexempel på högst 16 KiB.
En sparad regel är Granskas tills skannern har kört den med samma opengrep, i samma inhägnade miljö som dina skanningar, på dess eget testexempel. Den blir Aktiv när den kan tolkas, hittar något i exemplet och blir klar inom 30 sekunder (5 sekunder per fil); annars blir den Avvisat, med orsaken. Bara en aktiv regel som inte är avstängd körs. När du ändrar en regel eller dess exempel kontrolleras den igen; fram till dess körs den inte. Du kan stänga av en regel utan att radera den.
Fynd från dina regler visas tillsammans med de inbyggda, i kontrollen av pull requesten och under Säkerhet › Fynd › SAST, märkta Egen med regelns namn. De blockerar som inbyggda fynd: efter sin allvarlighetsgrad jämfört med allvarlighetsgraden för blockering nedan.
Reglerna lagras i fremforge och körs därifrån. Skannern hämtar aldrig regler från en URL eller ett registry, och kontrollen av en regel gör inga nätverksanrop. Inställningen custom_rules_url är avvecklad: den läses inte längre, och ett annat värde än null eller "" avvisas 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}Att lista kräver findings:read; ändringar kräver policy:write. En ny eller ändrad regel kommer tillbaka med status pending; skannerns bedömning sätter den till valid eller invalid, med status_code (till exempel no-match eller parse), status_detail (opengreps eget meddelande, när det finns ett) och status_reason (en mening). En regel som API:t kan avvisa innan skannern ser den besvaras med 400 och orsaken (till exempel one-rule eller unknown-key); ett id som redan används ger duplicate-id och den 51:a regeln limit-reached, båda 409. Varje ändring finns i granskningsloggen.
Terraform och OpenTofu
Varje regel är en fremforge_sast_custom_rule (provider 0.5.0 och senare). En apply väntar på skannerns bedömning och misslyckas med orsaken när regeln avvisas; sätt wait_for_verdict = false för att hoppa över väntan.
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 är utfasad och skickas inte längre; ta bort den.
Inställningar
Under Säkerhet › Fynd › SAST, eller GET och PUT /_app/api/v1/orgs/{org}/code-security/sast/settings (PUT kräver policy:write):
| Inställning | Värden | Standard |
|---|---|---|
| SAST aktiverat för denna organisation | på, av | på |
| Allvarlighetsgrad för blockering | info, warning, error: fynd på eller över den underkänner fremforge/sast | error |
Taint-regler (taint_rules) | default, on, off. default är påslaget för fremforges egna organisationer och avstängt för andra. Deras fynd blockerar aldrig | default |
Om en underkänd kontroll blockerar en merge beror också på kontrollens läge under Säkerhet › Prioritera › Pull request-kontroller och på branch-skydd. På en pull request blockerar bara fynd som pull requesten inför: ett fynd som bara flyttats till en annan rad är inte nytt.
Fynd
Fynden rangordnas efter tillförlitlighet, sedan allvarlighetsgrad, sedan om skannern spårade data från en källa som användarinmatning till fyndet, sedan ålder. Fynd i tester, exempel, tredjepartskod eller genererad kod, och fynd från en regel som ofta avfärdas, listas längre ned; de avfärdas inte. Avfärda ett fynd med en orsak, ett i taget eller flera samtidigt, eller med POST .../code-security/sast/findings/{id}/dismiss. Listan finns också på GET /_app/api/v1/orgs/{org}/code-security/sast/findings.
AI-fixar
För en kort lista med regler ber AI-fix din organisations egen AI-modell om en pull request med en rättning. Den är avstängd som standard; slå på den under Säkerhet › Åtgärda › AI-fix. Se AI-fixar för SAST-fynd.