
CWE(Common Weakness Enumeration)는 소프트웨어와 하드웨어에서 발생하는 보안 취약점의 근본 원인이 되는 '약점(Weakness)'을 체계적으로 분류한 목록입니다. 미국의 비영리 전략 연구 기구인 MITRE 사가 관리하며, 개발자와 보안 전문가들이 공통된 언어로 소프트웨어의 결함을 식별하고 수정할 수 있도록 돕는 표준 가이드 역할을 합니다.
1. CWE의 핵심 개념 : "Weakness" vs "Vulnerability"
많은 사람이 CVE(취약점)와 CWE(약점)를 혼동하곤 합니다. 이 둘의 차이를 이해하는 것이 CWE를 파악하는 첫걸음입니다.
- CWE (Weakness) : 추상적인 '유형'입니다. 예를 들어 "입력값 검증 미흡"이라는 약점은 수만 개의 프로그램에서 공통으로 나타날 수 있는 논리적 오류입니다. (예: CWE-79: Cross-site Scripting)
- CVE (Vulnerability) : 특정 소프트웨어 버전에서 발견된 '실제 사례'입니다. 예를 들어 "A 브라우저 1.0 버전의 특정 코드에서 발생하는 XSS 취약점"을 의미합니다. (예: CVE-2023-XXXXX)
- CWE가 '과속'이라는 교통 법규 위반 항목이라면, CVE는 '오늘 오후 2시 강남역에서 과속으로 적발된 특정 차량의 사건'과 같습니다.
2. CWE의 계층 구조
CWE는 단순히 나열된 리스트가 아니라, 상위 개념에서 하위 개념으로 이어지는 트리 구조를 가집니다.
- Class (클래스) : 가장 추상적인 수준 (예: 리소스 관리 오류)
- Base (기본) : 구체적인 오류 유형 (예: 버퍼 오버플로)
- Variant (변종) : 특정 언어나 환경에서 발생하는 매우 구체적인 약점
3. CWE와 연계되는 다른 표준들
- CVE (Common Vulnerabilities and Exposures) : 개별 보안 결함 목록
- CAPEC (Common Attack Pattern Enumeration and Classification) : 공격자가 약점(CWE)을 어떻게 공격하는지에 대한 공격 패턴 목록
- CVSS (Common Vulnerability Scoring System) : 취약점의 위험도 점수 산정 시스템
4. CWE Top 25 목록(2023-2024 기준)
MITRE에서 매년 발표하는 CWE Top 25 목록(2023-2024 기준)을 정리해 드립니다. 이 순위는 단순 빈도가 아니라, 해당 약점이 실제 공격에 이용되었을 때의 위험도(Severity)와 발생 빈도를 결합한 점수를 바탕으로 산정됩니다.
| 순위 | CWE ID | 명칭 (영문/국문) | 주요 특징 및 위험성 |
| 1 | CWE-787 | Out-of-bounds Write (범위 밖 쓰기) | 메모리 버퍼 끝을 넘어 쓰기 수행. 시스템 충돌 및 임의 코드 실행. |
| 2 | CWE-79 | Cross-site Scripting (XSS) | 웹 페이지에 악성 스크립트 삽입. 사용자 세션 탈취 및 피싱. |
| 3 | CWE-89 | SQL Injection (SQL 삽입) | DB 쿼리 조작. 데이터 유출, 변조 및 인증 우회. |
| 4 | CWE-416 | Use After Free (해제 후 사용) | 할당 해제된 메모리 참조. 프로그램 제어권 탈취 가능. |
| 5 | CWE-78 | OS Command Injection | 운영체제 명령 실행. 서버 전체 장악 위험. |
| 6 | CWE-20 | Improper Input Validation | 입력값 검증 미흡. 모든 보안 사고의 근본 원인. |
| 7 | CWE-125 | Out-of-bounds Read (범위 밖 읽기) | 허용되지 않은 메모리 읽기. 민감 정보(비밀키 등) 노출. |
| 8 | CWE-22 | Path Traversal (경로 조작) | 파일 경로 조작. 시스템 내부 중요 파일 접근 및 읽기. |
| 9 | CWE-352 | CSRF (사이트 간 요청 위조) | 사용자 의사와 무관하게 조작된 요청 전송. 설정 변경 등. |
| 10 | CWE-434 | Unrestricted Upload of File | 악성 파일(웹셸) 업로드. 원격 코드 실행(RCE)으로 직결. |
| 11 | CWE-862 | Missing Authorization (권한 부여 누락) | 인증은 되었으나 특정 기능 수행 권한이 없는 자의 접근 허용. |
| 12 | CWE-476 | NULL Pointer Dereference | NULL 포인터 참조. 애플리케이션 강제 종료 및 DoS 유발. |
| 13 | CWE-287 | Improper Authentication (부적절한 인증) | 사용자 신원 확인 절차 결함. 타인 계정 탈취. |
| 14 | CWE-190 | Integer Overflow (정수 오버플로) | 산술 연산 결과가 최대 범위를 초과하여 비정상 동작 유발. |
| 15 | CWE-306 | Missing Auth for Critical Function | 중요 기능 수행 시 인증 절차 아예 누락. |
| 16 | CWE-502 | Deserialization of Untrusted Data | 신뢰할 수 없는 데이터 역직렬화. 원격 코드 실행의 주범. |
| 17 | CWE-77 | Command Injection (명령어 삽입) | 애플리케이션 내부 명령어 실행 구문 조작. |
| 18 | CWE-119 | Memory Buffer Restriction | 메모리 버퍼 범위 제한 미비. (CWE-787의 상위 개념) |
| 19 | CWE-798 | Use of Hard-coded Credentials | 소스코드 내 비밀번호 하드코딩. 계정 탈취 및 유출 용이. |
| 20 | CWE-918 | SSRF (서버 측 요청 위조) | 서버가 공격자 의도대로 내부 자원에 요청을 보내게 함. |
| 21 | CWE-362 | Race Condition (경합 상태) | 동시성 제어 미흡으로 실행 순서에 따라 보안 결함 발생. |
| 22 | CWE-269 | Improper Privilege Management | 사용자에게 필요 이상의 과도한 권한 할당. |
| 23 | CWE-94 | Code Injection (코드 삽입) | 애플리케이션이 외부 코드를 직접 실행하게 함. |
| 24 | CWE-863 | Incorrect Authorization (부적절한 권한 부여) | 권한 검사 로직 자체의 오류로 접근 허용. |
| 25 | CWE-91 | XML Injection | XML 구조 조작을 통한 데이터 노출 및 변조. |
