Tento blog jsem začal kdysi psát jako takový poznámkovník pro sebe sama. A taky proto že by mohl pomoci i dalším lidem co řeší stejné problémy jako já, a mohl by tak být prospěšný světu. A jednu takovou poznámku (návod) si sem dám i teď.

Používám na naše weby Cloudflare, historicky kvůli kešování, pak jako wafku a ochranu před DDOS a celkem jsem si na něj zvykl a mám ho rád. Nicméně přes všechnu tu securitu mi nezobrazoval soubory security.txt, které rád propaguji a já dlouho čekal, než mě Buchtič poprudil a poslal postup, jak to fixnout. Tak jdeme na to.

Co je to Security.txt

Security.txt je standardizovaný textový soubor (RFC 9116), který firmy organizace umisťují na svůj webový server, aby poskytly bug (bounty) hunterům informace o tom, jak mohou být kontaktovány ohledně bezpečnostních problémů.

Tento soubor tedy slouží jako zkratka pro lidi, kteří vám chtějí nahlásit zranitelnosti nebo bezpečnostní incidenty týkající se webu nebo infrastruktury. Dává to smysl – už jste se někdy několik dní prokousávali přes zákaznickou podporu, abyste se dostali ke správnému člověku, jen proto, abyste zjistili, že on tohle neřeší a odkázal vás jinam? Tak přesně tohle ten soubor eliminuje.

V případě kritických zranitelností to totiž může být totiž dost zásadní.

Obsah souboru Security.txt

Soubor obvykle obsahuje následující informace:

  • Contact: Kontaktní informace pro hlášení bezpečnostních problémů (například e-mailová adresa nebo URL formuláře).
  • Preffered-language: Jakým jazykem se chcete primárně dorozumívat.
  • Encryption: Veřejný klíč PGP pro šifrování citlivých informací.
  • Policy: Odkaz na stránku s politikou bezpečnosti, kde je popsán postup při nahlášení zranitelností.
  • Hiring: Odkaz na stránku s nabídkou pracovních míst v oblasti kybernetické bezpečnosti.
  • Expires: Datum, kdy soubor přestane být platný.

Příklad souboru Security.txt

# Security.txt
Contact: [email protected]
Preferred-Languages: cs,en
Encryption: https://boit.cz/pgp-key.txt
Policy: https://boit.cz/security-policy.html
Hiring: https://boit.cz/kariera
Expires: 2025-12-31T23:59:59.000Z

Umístění souboru

Soubor Security.txt by měl být umístěn na dobře známé cestě, aby jej bylo snadné najít:

🤖 Tenhle web je bez reklam! 🤖
💸 Nesbírám a neprodávám data návštěvníků. 💸
🕵️‍♂️ Respektuji Vaše soukromí. 🕵️‍♂️
🌎 Píšu pro dobro lidstva. 🌎

❤️ Líbí se Vám článek? ❤️

Kupte mi kafe!

.well-known/security.txt (například https://boit.cz/.well-known/security.txt)

Výhody

  • Snadný kontakt: Výzkumníci a etičtí hackeři mohou snadno najít způsob, jak kontaktovat správného člověka.
  • Zvýšení důvěry: Umožňuje transparentní komunikaci ohledně bezpečnostních postupů organizace.

Tento soubor hledají i některé auditní nástroje. Třeba můj oblíbený Pentest-tools jeho (ne)přítomnost vypisuje jako informativní nález také. A chci se pochlubit, že tak činí díky mému podnětu, z čehož mám velkou radost.

Ok, co je to security.txt a proč ho mpoužívat už víme, teď si ale pojďme říct, jak ho skrze ten cloudflare pronatovat.

Cloudflare musí být již nastaven s povoleným režimem Proxy (oranžový oblak) pro danou doménu. Použiju pro příklad naši doménu boit.cz a všechny požadavky na *boit.cz/.well-known/security.txt budeme směrovat na našeho Cloudflare Workera.

Začněte vytvořením nové aplikace:

Ukáže se vám vzorový Worker, dejte Deploy a pak Edit code.

No a pak stačí jen vložit kód níže – samozřejmě si údaje pro kontaktování upravte.

addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
  // Define the content of your security.txt file
  const securityTxtContent = `Contact: [email protected],[email protected]
Expires: 2025-12-31T23:59:00.000Z
Preferred-Languages: cs,en
Canonical: https://boit.cz/.well-known/security.txt
Preferred-Languages: cs,en`
// Set the appropriate headers for the security.txt file
  const headers = {
    'Content-Type': 'text/plain',
    'Cache-Control': 'public, max-age=3600' // Cache the file for 1 hour (adjust as needed)
  }
  return new Response(securityTxtContent, { status: 200, headers })
}

Uložte ho, deployněte, workera pak otevřete a běžte do Settings-Triggers-Add route.

Tady pak přidejte cestu k souboru security.txt, kam se má odkazovat a zvolte zónu (web) pro kterou to platí -tedy v našem případě takto:

V jednom workerovi můžete nastavit rout několik a dát klidně víc zón (webů), jen stačí změnit doménu i v řádku Route.

A to je vše, přátelé! Pokud se vám návod hodil, kupte mi na odkazu níže kafe. Díky a mějte se.

🤖 Tenhle web je bez reklam! 🤖
💸 Nesbírám a neprodávám data návštěvníků. 💸
🕵️‍♂️ Respektuji Vaše soukromí. 🕵️‍♂️
🌎 Píšu pro dobro lidstva. 🌎

❤️ Líbí se Vám článek? ❤️

Kupte mi kafe!