Przejdź do treści
Baza wiedzy Zaktualizowano: 4 lutego 2026 10 min czytania

Co to jest CWE? Przewodnik po Common Weakness Enumeration

CWE (Common Weakness Enumeration) to katalog typowych słabości oprogramowania. Poznaj CWE Top 25, różnicę między CWE a CVE i jak używać CWE w rozwoju bezpiecznego oprogramowania.

Czym jest CWE?

CWE (Common Weakness Enumeration) to utrzymywany przez społeczność katalog typowych słabości bezpieczeństwa oprogramowania i sprzętu. W przeciwieństwie do CVE, które opisuje konkretne podatności, CWE definiuje kategorie błędów, które mogą prowadzić do podatności.

AspektCWECVE
Co opisujeTyp słabości/błęduKonkretna podatność
PrzykładCWE-79: Cross-site ScriptingCVE-2021-44228: Log4Shell
Liczba wpisów~1000 typów~250,000+ podatności
ZmiennośćStabilna (kategorie)Rośnie codziennie
ZastosowanieEdukacja, analiza koduPatching, alerting

Prosta analogia:

  • CWE = rodzaj choroby (grypa)
  • CVE = konkretny przypadek zachorowania (pacjent #12345 z grypą)

Kto utrzymuje CWE?

CWE jest rozwijane przez MITRE Corporation we współpracy z społecznością bezpieczeństwa. Lista jest finansowana przez CISA (Cybersecurity and Infrastructure Security Agency).

Struktura CWE

Hierarchia CWE

CWE jest zorganizowane hierarchicznie:

CWE-1000: Research Concepts (korzeń)
└── CWE-699: Software Development (kategoria)
    └── CWE-20: Improper Input Validation (klasa)
        └── CWE-79: Cross-site Scripting (bazowa)
            └── CWE-80: Basic XSS (wariant)

Typy wpisów CWE

TypOpisPrzykład
PillarNajwyższy poziom abstrakcjiCWE-682: Incorrect Calculation
ClassAbstrakcyjna klasa słabościCWE-20: Improper Input Validation
BaseKonkretna słabośćCWE-79: XSS
VariantSpecyficzny wariantCWE-80: Basic XSS
CompoundKombinacja słabościCWE-352: CSRF

Anatomia wpisu CWE

Każdy wpis CWE zawiera:

CWE-89: Improper Neutralization of Special Elements
        used in an SQL Command ('SQL Injection')

├── Description (opis słabości)
├── Extended Description (szczegóły techniczne)
├── Relationships (relacje z innymi CWE)
├── Applicable Platforms (języki, technologie)
├── Common Consequences (skutki exploitacji)
├── Likelihood of Exploit (prawdopodobieństwo)
├── Detection Methods (jak wykryć)
├── Potential Mitigations (jak zapobiec)
├── Demonstrative Examples (przykłady kodu)
├── Observed Examples (powiązane CVE)
└── References (źródła)

CWE Top 25 Most Dangerous Software Weaknesses

MITRE co roku publikuje listę 25 najniebezpieczniejszych słabości na podstawie danych o realnych podatnościach (CVE) i ich wpływie.

CWE Top 25 (2024)

RankCWE IDNazwaPrzykład
1CWE-79Cross-site Scripting (XSS)Wstrzyknięcie JS do strony
2CWE-89SQL Injection' OR '1'='1
3CWE-416Use After FreeDostęp do zwolnionej pamięci
4CWE-78OS Command Injection; rm -rf /
5CWE-20Improper Input ValidationBrak walidacji danych wejściowych
6CWE-125Out-of-bounds ReadOdczyt poza buforem
7CWE-22Path Traversal../../../etc/passwd
8CWE-352Cross-Site Request ForgeryNieautoryzowana akcja
9CWE-787Out-of-bounds WriteBuffer overflow
10CWE-287Improper AuthenticationSłabe uwierzytelnianie

Pełna lista Top 25 (2024)

RankCWE IDNazwa
11CWE-476NULL Pointer Dereference
12CWE-798Use of Hard-coded Credentials
13CWE-190Integer Overflow
14CWE-502Deserialization of Untrusted Data
15CWE-77Command Injection
16CWE-119Buffer Overflow
17CWE-862Missing Authorization
18CWE-276Incorrect Default Permissions
19CWE-918Server-Side Request Forgery (SSRF)
20CWE-306Missing Authentication
21CWE-362Race Condition
22CWE-269Improper Privilege Management
23CWE-94Code Injection
24CWE-863Incorrect Authorization
25CWE-400Uncontrolled Resource Consumption

Najważniejsze CWE - szczegóły

CWE-79: Cross-site Scripting (XSS)

Opis: Aplikacja nie neutralizuje lub niepoprawnie neutralizuje dane wejściowe przed włączeniem ich do strony HTML.

Typy XSS:

  • Reflected (CWE-79) - payload w URL, wykonany natychmiast
  • Stored (CWE-79) - payload zapisany w bazie, wykonany przy każdym wyświetleniu
  • DOM-based (CWE-79) - payload manipuluje DOM bez wysyłania do serwera

Przykład podatnego kodu (PHP):

// ŹLE - brak enkodowania
echo "Witaj, " . $_GET['name'];

// Atak: ?name=<script>alert('XSS')</script>

Poprawne rozwiązanie:

// DOBRZE - enkodowanie HTML
echo "Witaj, " . htmlspecialchars($_GET['name'], ENT_QUOTES, 'UTF-8');

Mitigacje:

  1. Enkodowanie wyjścia (output encoding)
  2. Content Security Policy (CSP)
  3. Walidacja i sanityzacja danych wejściowych
  4. Używanie frameworków z auto-escape (React, Angular)

CWE-89: SQL Injection

Opis: Aplikacja konstruuje zapytania SQL używając danych wejściowych bez odpowiedniej neutralizacji.

Przykład podatnego kodu (PHP):

// ŹLE - konkatenacja
$query = "SELECT * FROM users WHERE id = " . $_GET['id'];

// Atak: ?id=1 OR 1=1

Poprawne rozwiązanie:

// DOBRZE - prepared statements
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([$_GET['id']]);

Mitigacje:

  1. Prepared statements / parameterized queries (najważniejsze!)
  2. ORM z parametryzacją
  3. Walidacja typu danych wejściowych
  4. Zasada najmniejszych uprawnień dla konta DB

CWE-22: Path Traversal

Opis: Aplikacja używa danych wejściowych do konstruowania ścieżek plików bez odpowiedniej walidacji.

Przykład podatnego kodu (Python):

# ŹLE - brak walidacji ścieżki
filename = request.args.get('file')
return send_file(f"/uploads/{filename}")

# Atak: ?file=../../../etc/passwd

Poprawne rozwiązanie:

# DOBRZE - walidacja i normalizacja
import os
filename = request.args.get('file')
safe_path = os.path.normpath(os.path.join('/uploads', filename))
if not safe_path.startswith('/uploads/'):
    abort(403)
return send_file(safe_path)

CWE-798: Use of Hard-coded Credentials

Opis: Aplikacja zawiera zakodowane na stałe hasła, klucze API lub inne sekrety.

Przykład podatnego kodu:

# ŹLE - hasło w kodzie
DB_PASSWORD = "SuperSecretPassword123!"
API_KEY = "sk-1234567890abcdef"

Poprawne rozwiązanie:

# DOBRZE - zmienne środowiskowe lub secrets manager
import os
DB_PASSWORD = os.environ.get('DB_PASSWORD')
API_KEY = os.environ.get('API_KEY')

# Lub: AWS Secrets Manager, HashiCorp Vault, Azure Key Vault

CWE vs OWASP Top 10

CWE i OWASP Top 10 są powiązane, ale służą różnym celom:

AspektCWEOWASP Top 10
ZakresWszystkie słabościTop 10 kategorii dla web
GranularnośćSzczegółowa (950+ wpisów)Wysoka abstrakcja (10 kategorii)
AktualizacjaCiągłaCo ~4 lata
ZastosowanieKlasyfikacja technicznaAwareness, priorytetyzacja

Mapowanie OWASP Top 10 (2021) na CWE

OWASPGłówne CWE
A01: Broken Access ControlCWE-200, CWE-284, CWE-285, CWE-639
A02: Cryptographic FailuresCWE-259, CWE-327, CWE-331
A03: InjectionCWE-77, CWE-78, CWE-79, CWE-89
A04: Insecure DesignCWE-209, CWE-256, CWE-501
A05: Security MisconfigurationCWE-16, CWE-611
A06: Vulnerable ComponentsCWE-1104
A07: Auth FailuresCWE-287, CWE-384, CWE-613
A08: Software/Data IntegrityCWE-494, CWE-502, CWE-829
A09: Logging FailuresCWE-117, CWE-223, CWE-532
A10: SSRFCWE-918

Jak używać CWE w praktyce?

1. Secure Code Review

Podczas przeglądu kodu, szukaj wzorców odpowiadających konkretnym CWE:

Checklist Code Review:
□ CWE-79: Czy dane użytkownika są enkodowane przed wyświetleniem?
□ CWE-89: Czy używamy prepared statements?
□ CWE-22: Czy walidujemy ścieżki plików?
□ CWE-798: Czy nie ma hardcoded credentials?
□ CWE-502: Czy deserializujemy tylko zaufane dane?

2. SAST/DAST Configuration

Narzędzia SAST (np. SonarQube, Checkmarx) raportują znalezione problemy z odniesieniem do CWE:

Finding: SQL Injection vulnerability
File: UserController.java:45
CWE: CWE-89
Severity: Critical
Recommendation: Use PreparedStatement instead of string concatenation

3. Vulnerability Classification

Przypisuj CWE do znalezionych podatności:

Raport z pentestów:
┌────────────────────────────────────────────────┐
│ Finding #1: Stored XSS in comments            │
│ CWE: CWE-79                                   │
│ CVSS: 6.1 (Medium)                            │
│ OWASP: A03:2021 Injection                     │
│ Remediation: Implement output encoding        │
└────────────────────────────────────────────────┘

4. Developer Training

Szkolenia deweloperów oparte na CWE Top 25:

  1. Tydzień 1: CWE-79 (XSS) - teoria + ćwiczenia
  2. Tydzień 2: CWE-89 (SQLi) - teoria + ćwiczenia
  3. Tydzień 3: CWE-22 (Path Traversal) - teoria + ćwiczenia

5. Procurement Requirements

W wymaganiach dla dostawców:

“Dostarczone oprogramowanie nie może zawierać słabości z listy CWE Top 25 Most Dangerous Software Weaknesses, co zostanie zweryfikowane poprzez skanowanie SAST/DAST przed odbiorem.”

Narzędzia wspierające CWE

NarzędzieTypObsługa CWE
SonarQubeSASTMapowanie reguł na CWE
CheckmarxSASTNative CWE reporting
SnykSCA/SASTCWE w raportach
OWASP ZAPDASTCWE ID w alertach
Burp SuiteDASTCWE references
SemgrepSASTCustom rules z CWE

CWE w regulacjach i standardach

Regulacja/StandardWymagania dot. CWE
PCI DSS 4.0Wymaga adresowania OWASP Top 10 (mapowane na CWE)
NIST SSDFRekomenduje używanie CWE do klasyfikacji
ISO 27001Pośrednio przez secure development
NIS2Wymagania dot. bezpiecznego rozwoju oprogramowania
Cyber Resilience ActBędzie wymagać raportowania CWE

FAQ

Czy każda podatność (CVE) ma przypisane CWE?

Nie zawsze, ale NVD stara się przypisywać CWE do wszystkich CVE. Około 85% CVE ma przypisane CWE.

Ile CWE powinienem znać jako developer?

Zacznij od CWE Top 25. To pokrywa większość realnych problemów. Następnie poznaj CWE specyficzne dla Twojej technologii (np. CWE-918 SSRF dla aplikacji cloud).

Czy CWE dotyczy tylko aplikacji webowych?

Nie. CWE obejmuje słabości w:

  • Aplikacjach webowych
  • Aplikacjach desktopowych
  • Systemach embedded
  • Sprzęcie (hardware)
  • Kryptografii
  • Konfiguracji

Jak raportować nowe CWE?

Można zgłaszać propozycje nowych CWE przez stronę MITRE CWE. Wymagane jest uzasadnienie, że słabość jest powszechna i nie jest pokryta przez istniejące CWE.

Podsumowanie

  • CWE to katalog typów słabości oprogramowania (nie konkretnych podatności)
  • CVE opisuje konkretne podatności, CWE klasyfikuje typ błędu
  • CWE Top 25 to lista najniebezpieczniejszych słabości - znajomość obowiązkowa dla developerów
  • Najważniejsze CWE: CWE-79 (XSS), CWE-89 (SQLi), CWE-22 (Path Traversal)
  • Używaj CWE do klasyfikacji w raportach, szkoleniach, wymaganiach dla dostawców
  • Narzędzia SAST/DAST automatycznie raportują znalezione problemy z odniesieniem do CWE

Chcesz sprawdzić bezpieczeństwo swojego kodu? Zamów audyt kodu źródłowego lub testy penetracyjne aplikacji. Skontaktuj się z nami.

Powiązane pojęcia

Poznaj kluczowe terminy związane z tym artykułem w naszym słowniku cyberbezpieczeństwa:

  • Bezpieczeństwo aplikacji — Bezpieczeństwo aplikacji to praktyki i narzędzia chroniące aplikacje przed…
  • OWASP Top 10 — OWASP Top 10 to lista 10 najkrytyczniejszych zagrożeń bezpieczeństwa aplikacji…
  • Bezpieczne programowanie — Bezpieczne programowanie to zestaw praktyk i narzędzi minimalizujących ryzyko…
  • Cross-Site Scripting (XSS) — XSS to atak na aplikacje webowe polegający na wstrzykiwaniu złośliwego kodu…
  • Powierzchnia ataku — Powierzchnia ataku (Attack Surface) to suma wszystkich punktów, przez które…

Sprawdź nasze usługi

Potrzebujesz wsparcia w zakresie cyberbezpieczeństwa? Sprawdź:

Udostępnij:

Porozmawiaj z ekspertem

Masz pytania dotyczące tego tematu? Skontaktuj się z naszym opiekunem.

Opiekun handlowy
Przemysław Widomski

Przemysław Widomski

Opiekun handlowy

Odpowiedź w ciągu 24 godzin
Bezpłatna konsultacja
Indywidualne podejście

Podanie numeru telefonu przyspieszy kontakt.

Chcesz obniżyć ryzyko i koszty IT?

Umów bezpłatną konsultację - odpowiemy w ciągu 24h

Odpowiedź w 24h Bezpłatna wycena Bez zobowiązań

Lub pobierz bezpłatny przewodnik:

Pobierz checklistę NIS2