Hoppa till huvudinnehållet

Säkerhetsmeddelanden för dina repon

När någon hittar en svaghet i programvara som du underhåller åtgärdar du den först och berättar om den sedan. Ett säkerhetsmeddelande är hur du berättar det: ett kort, strukturerat besked om vad som påverkas, hur allvarligt och vilken version som åtgärdar det. Skannrar läser säkerhetsmeddelanden för att varna alla som är beroende av ditt paket.

fremforge håller en organisations säkerhetsmeddelanden under Säkerhet › Rapporter › Säkerhetsmeddelanden, och i API:t under /_app/api/v1/orgs/{org}/security-advisories.

Utkast i förtroende

Nytt meddelande öppnar ett utkast. Ett utkast anger:

  • det repo det gäller;
  • en titel på en rad och en beskrivning: vad svagheten är, vem som påverkas, konsekvenserna och hur man åtgärdar eller kringgår den;
  • de berörda paketen, vart och ett med sitt ekosystem, paketnamn, sårbara versioner och den första åtgärdade versionen;
  • allvarlighetsgraden, som en CVSS-vektor eller en nivå (critical, high, medium, low);
  • svagheterna (CWE-id:n), ett valfritt CVE-id och referenser.

Ett utkast är bara synligt för:

  • organisationens ägare. Dess granskare ser bara att det finns, dess repo, status och datum, aldrig innehållet;
  • administratörerna för det repo det gäller (se Repo-administratörer);
  • de personer som de bjuder in till det (se Medarbetare).

Titel, beskrivning, referenser och kommentarer lagras krypterade. fremforges egna driftverktyg och AI-agenter ser varken texten eller vem som skrev den.

De som kan se ett utkast kan diskutera det i konfidentiella kommentarer. De förblir privata, även efter att säkerhetsmeddelandet har publicerats.

Sårbara versioner

Skriv de sårbara versionerna som ett eller två villkor, i samma form som GitHub använder:

Du skriverBetyder
< 1.2.3varje version före 1.2.3
>= 1.0.0, < 1.2.3från 1.0.0 upp till, men inte inklusive, 1.2.3
<= 2.0.1varje version till och med 2.0.1
= 3.1.0bara 3.1.0

> avvisas: OSV-formatet har ingen exklusiv nedre gräns, så använd >=. Med < X är den första åtgärdade versionen X. Lämna Åtgärdad version tom, eller använd <= för den sista berörda versionen.

Ekosystem: npm, PyPI, Maven (groupId:artifactId), Go (modulsökvägen), crates.io, RubyGems, NuGet, Packagist, Pub, Hex, GitHub Actions (owner/repository), SwiftURL och CRAN.

Allvarlighetsgrad

En basvektor för CVSS 3.1 sätter allvarlighetsgraden utifrån sin baspoäng, som fremforge räknar ut. En basvektor för CVSS 4.0 kontrolleras och sparas som den är angiven. Välj då allvarlighetsgraden själv: poängen för CVSS 4.0 räknas inte ut.

Publicera

Publicera meddelandet kräver en allvarlighetsgrad och minst ett berört paket.

  • För ett publikt repo (inte privat, i en organisation vars synlighet är publik) blir säkerhetsmeddelandet publikt direkt: en sida på https://frem.sh/_app/advisories/<id> och en OSV-post (se nedan). Om repot är publikt kontrolleras på nytt vid varje publik läsning. Om du gör repot privat senare slutar dess säkerhetsmeddelanden att levereras vid nästa läsning.
  • För ett privat repo förblir säkerhetsmeddelandet bara synligt inom din organisation. Det blir inte publikt om du öppnar repot senare; publicera då ett nytt.

Släpp fixen innan du publicerar: säkerhetsmeddelandet berättar för alla var svagheten finns.

Fixen utvecklas tills vidare utanför fremforge. Ett säkerhetsmeddelande innehåller text; fremforge har ingen tillfällig privat fork för det. Ett privat repo i din organisation skulle kunna läsas av varje team med åtkomst till alla repon, vilket som standard omfattar Members och Viewers, så det erbjuds inte. Utveckla fixen på det sätt som ditt projekt hanterar opublicerade säkerhetsfixar, och publicera säkerhetsmeddelandet när den åtgärdade versionen har släppts.

Varje säkerhetsmeddelande har ett id på formen FFSA-xxxx-xxxx-xxxx, som bestäms när utkastet skapas.

Repo-administratörer

Ett repos administratörer hanterar säkerhetsmeddelanden och privata rapporter för det repot utan att vara ägare av organisationen, på samma sätt som GitHub låter repo-administratörer göra det. De hittar rapporterna som skickats till de repon de administrerar under Rapporter till repon du administrerar på /_app/security-reports, kan godkänna eller avvisa dem, och läsa och kommentera de reponas utkast. Om någon administrerar ett repo frågas frem.sh vid varje anrop, så en ändring av behörigheter gäller direkt. En organisationsägare räknas som administratör för varje repo i organisationen.

Medarbetare

Bjud in personer till ett utkast eller ett publicerat säkerhetsmeddelande med deras frem.sh-inloggning, till exempel en extern forskare eller en underhållare från ett annat projekt. De behöver inte vara medlemmar i din organisation. En inbjuden person läser säkerhetsmeddelandet och dess konfidentiella kommentarer, och lägger till kommentarer, från sin egen sida på /_app/security-reports. Hen kan inte ändra eller publicera det. Om du tar bort personen upphör åtkomsten direkt. Upp till 20 personer kan bjudas in till ett säkerhetsmeddelande.

Privat sårbarhetsrapportering

Med privat sårbarhetsrapportering påslagen kan vem som helst som är inloggad på frem.sh och kan läsa ett repo rapportera en svaghet i det till dig i förtroende, även personer utanför din organisation. Utan den måste den som hittar svagheten gissa en e-postadress eller öppna en publik issue.

Den är avstängd tills du slår på den. Ägare anger en standard för hela organisationen under Säkerhet › Rapporter › Säkerhetsmeddelanden › Inställningar, och kan slå på eller av den för enskilda repon där; en inställning för ett repo går före standarden.

Vad en rapportör skickar

Rapportformuläret finns på https://frem.sh/_app/security-reports/new?repo=<org>/<repository>. Länka till det från ditt repos SECURITY.md. En rapport har en titel, en beskrivning, de berörda versionerna, hur svagheten hittades och ett valfritt proof of concept. Den lagras krypterad, och bara organisationens ägare, repots administratörer och rapportören ser den. Dess text finns aldrig i ett e-postmeddelande eller i granskningsloggen; granskningsloggen anger rapporter med id.

För att hålla kanalen användbar begränsar fremforge rapporterna:

  • 3 per person till ett repo, och 10 per person totalt, inom 24 timmar;
  • inga från ett konto som är yngre än 24 timmar;
  • 5 i minuten från en och samma IP-adress.

Ett anrop som skulle bryta mot en gräns avvisas och inget lagras.

Att avgöra en rapport

Organisationens ägare får ett e-postmeddelande när en rapport kommer in och hittar den under Säkerhet › Rapporter › Säkerhetsmeddelanden › Privata rapporter. Repots administratörer hittar den på sin egen sida på /_app/security-reports.

  • Godkänn rapporten gör ett utkast till säkerhetsmeddelande av rapporten, bjuder in rapportören som medarbetare och ber hen att godkänna ett omnämnande som reporter.
  • Godkänn inte stänger rapporten med en orsak: ingen sårbarhet, dubblett, utanför omfånget, spam eller annat.

Oavsett vilket får rapportören besked via e-post. En rapportör kan dra tillbaka en rapport tills den är avgjord. En avvisad rapport raderas 2 år efter att den avvisades. Godkända rapporter och deras säkerhetsmeddelanden stannar hos din organisation.

Beroendeskanning

Ett publicerat säkerhetsmeddelande matchas mot din organisations förteckning över beroenden varje dag och direkt efter att du publicerat det: ett repo som är beroende av en berörd version får ett fynd under Säkerhet › Fynd › Beroenden, med säkerhetsmeddelandets FFSA-id, som vilken annan sårbarhet som helst. Om du drar tillbaka säkerhetsmeddelandet tas de fynd bort som det gav upphov till.

För andra organisationer matchas ett säkerhetsmeddelande bara när det finns i fremforges plattformsflöde. Det kräver, och kontrolleras på nytt varje dag:

  • att repot är publikt; och
  • att din organisation bevisligen äger varje berört paket: ett paket från din organisation i frem.sh-paketregistret, eller en Go-modul under frem.sh/<your organisation>/; eller annars att fremforge har granskat säkerhetsmeddelandet och godkänt det.

Ägarskapet kommer från frem.sh:s egna register, aldrig från paketnamnet: ett npm-scope eller en modulsökväg som bara liknar din organisations namn räknas inte. Om du förlorar paketet eller gör repot privat lämnar säkerhetsmeddelandet plattformsflödet vid nästa dagliga körning. Plattformsflödet levereras på /_app/api/v1/advisories?scope=platform, och fremforge lägger in det i de OSV-databaser som dess skannrar läser.

Dra tillbaka, stänga, radera

  • Ett publicerat säkerhetsmeddelande dras tillbaka, det raderas aldrig. Det stannar i flödet med withdrawn satt, så att skannrar får veta att det inte längre gäller.
  • Ett utkast som du inte publicerar kan stängas (och öppnas igen) eller raderas tillsammans med sina kommentarer.

Omnämnanden

Nämn de personer som hittade, rapporterade eller åtgärdade svagheten, med deras frem.sh-inloggning och en OSV-typ för omnämnande. Ett omnämnande visas publikt och exporteras först när den omnämnda personen har godkänt det, på sin egen sida på /_app/security-reports. Att nämna dig själv kräver inget godkännande.

Export: OSV och CSAF

Varje säkerhetsmeddelande, även utkast, kan laddas ned som:

  • OSV 1.6: formatet som beroendeskannrar läser (osv-scanner, Trivy och fremforges egen beroendeskanning);
  • CSAF 2.0: ett csaf_security_advisory-dokument, det maskinläsbara format för säkerhetsmeddelanden som vägledningen under EU:s Cyber Resilience Act och BSI förväntar sig av tillverkare. Ett utkast är TLP AMBER med status draft, ett publicerat säkerhetsmeddelande TLP WHITE med status final.

Varje nedladdning registreras i granskningsloggen (security.advisory.exported), eftersom exporten av ett utkast beskriver en svaghet som ännu inte är åtgärdad.

Det publika OSV-flödet

Publicerade säkerhetsmeddelanden för publika repon levereras utan autentisering, äldsta ändring först, högst 100 per sida:

# The first page
curl -s 'https://frem.sh/_app/api/v1/advisories?limit=100'

# The next page: pass the `next` value of the previous answer as `since`
curl -s 'https://frem.sh/_app/api/v1/advisories?since=2026-10-25T00:00:00Z'

# One advisory
curl -s https://frem.sh/_app/api/v1/advisories/FFSA-xxxx-xxxx-xxxx

Varje post följer OSV-schemat, med CVE-id:t (om det finns) som alias och database_specific.source satt till fremforge. Om repot är publikt kontrolleras vid varje anrop, så ett säkerhetsmeddelande för ett repo som gjorts privat levereras inte vid nästa läsning. De publika läsningarna är begränsade till 60 anrop i minuten per klientadress (429 över det).

Begära ett CVE-id

fremforge är inte en CVE Numbering Authority och begär inte CVE-id:n åt dig. Under Begär ett CVE-id ger ett säkerhetsmeddelande dig sitt innehåll som text för MITRE:s formulär för CVE-begäran, eller för den CNA som täcker ditt projekt om det finns en. Skicka den själv och ange sedan det CVE-id du får i säkerhetsmeddelandet. API:t har samma text på /orgs/{org}/security-advisories/{id}/cve-request.

EU:s Cyber Resilience Act

CRA förväntar sig att en tillverkare hanterar sårbarheter i sina produkter: åtgärdar dem och publicerar information om de åtgärdade. Säkerhetsmeddelanden med CSAF-export stöder det. De gör dig inte regelefterlevande på egen hand, och fremforge rapporterar ingenting till ENISA eller ett nationellt CSIRT åt dig. Rapporteringen enligt artikel 14 i CRA ligger kvar hos dig.

Ännu inte tillgängligt

  • En tillfällig privat fork att utveckla fixen i: erbjuds inte, se Publicera.

API

Metod och sökvägScopeGör
GET /orgs/{org}/security-advisoriesfindings:read / advisories:readlistar (?state=, ?repo=)
POST /orgs/{org}/security-advisoriespolicy:writeskapar ett utkast
GET, PUT, DELETE /orgs/{org}/security-advisories/{id}findings:read eller advisories:read / policy:writeläser, ersätter, raderar ett utkast eller ett stängt meddelande
POST .../{id}/publish, /close, /reopen, /withdrawpolicy:writeändrar dess status
GET .../{id}/osv, /csaf, /cve-requestfindings:read eller advisories:readexport
POST .../{id}/credits, DELETE .../{id}/credits/{credit}policy:writeomnämnanden
GET, POST .../{id}/commentsadvisories:read / policy:writekonfidentiella kommentarer

findings:read läser bara publicerade säkerhetsmeddelanden för publika repon, och bara godkända omnämnanden. Utkast, stängda säkerhetsmeddelanden, säkerhetsmeddelanden för privata repon och kommentarerna till alla säkerhetsmeddelanden kräver advisories:read, som findings:read inte omfattar och som tokens skapade för CI-jobb inte har som standard. Ett omnämnande anger en frem.sh-användare: en okänd inloggning avvisas.

De fullständiga schemana finns i API-referensen.