Wszystkie projekty

AlertIT — podatności CVE na żywo

Serwis, który w czasie rzeczywistym pokazuje nowo publikowane podatności CVE — bez odświeżania strony, bez limitów API, w utwardzonym kontenerze Docker.

  • Node.js
  • Express
  • Server-Sent Events
  • CVE JSON 5
  • Docker
  • nginx
  • Cloudflare

O projekcie

AlertIT śledzi oficjalne repozytorium CVE (CVEProject/cvelistV5) i pokazuje nowe podatności w chwili ich publikacji — w jednym, czytelnym miejscu, bez ręcznego odświeżania. Powstał z codziennej potrzeby: zamiast przeglądać kanały RSS i biuletyny producentów, chciałem od razu widzieć, co nowego pojawiło się w bazie CVE i jak bardzo jest groźne.

Najważniejsze funkcje

  • Feed na żywo — nowe rekordy trafiają do przeglądarki przez Server-Sent Events; pasek statusu pokazuje stan połączenia i odliczanie do kolejnego sprawdzenia.
  • Widok dnia — wszystkie CVE opublikowane danego dnia (strefa Europe/Warsaw) z nawigacją do 30 dni wstecz.
  • Filtry według krytyczności CVSS — krytyczne, wysokie, średnie, niskie, bez oceny — oraz sortowanie od najgroźniejszych.
  • Wyszukiwarka — po numerze CVE, producencie lub produkcie, a w trybie zaawansowanym także po zakresie dat i przedziale oceny CVSS.
  • Szczegóły podatności — produkty i wersje, CNA, daty publikacji, linki do NVD i CVE.org oraz tłumaczenie opisu na polski.
  • Podsumowanie dnia i powiadomienia w przeglądarce.

Jak to działa

Backend w Node.js regularnie (domyślnie co 90 s) pobiera tylko początek dziennika zmian deltaLog.json — zapytaniem HTTP Range z nagłówkiem If-None-Match, więc gdy nic się nie zmieniło, odpowiedź to lekkie 304. Z nowych paczek wybiera nowo opublikowane rekordy, pobiera je, parsuje zgodnie ze schematem CVE JSON 5 i rozsyła do wszystkich podłączonych przeglądarek.

Dni, których jeszcze nie ma lokalnie, są dociągane i zapisywane po stronie serwera — przeglądarka nigdy nie łączy się bezpośrednio z GitHubem. Aplikacja nie korzysta z GitHub API, więc nie dotyczą jej limity zapytań i nie potrzebuje tokena.

Bezpieczeństwo

  • Dane z repozytorium są traktowane jako niezaufane: sanityzacja po stronie serwera, a w przeglądarce renderowanie wyłącznie przez textContent.
  • Ruch wychodzący tylko do zahardkodowanych hostów; adresy rekordów budowane ze zwalidowanego numeru CVE, a nie z linków w pobieranych danych (brak SSRF).
  • Ścisły Content Security Policy i rate limiting API.
  • Kontener bez uprawnień roota, z systemem plików tylko do odczytu, cap_drop: ALL i no-new-privileges; ruch publiczny przez Cloudflare.