
OWASP / CAPSEC의 Common Weakness Enumeration 데이터베이스를 기반으로 하는 명령줄 CWE 검색 도구.
OWASP / CAPSEC의 CWE(Common Weakness Enumeration) 데이터베이스를 기반으로 한 명령줄 CWE 검색 도구입니다.
공식 OWASP CWE 툴킷 페이지
Node.js 환경이 있다면 npx 도구를 사용하여 cwe-tool을 다음과 같이 호출할 수 있습니다:
npx cwe-tool [...command-line options...]
docker pull lirantal/cwe-tool
docker run --rm lirantal/cwe-tool --search test
git clone https://github.com/OWASP/cwe-tool
docker build -t docker.pkg.github.com/owasp/cwe-tool/cwe-tool .
위의 -t image name은 원하는 이미지 이름으로 지정할 수 있습니다!
Docker로 예제 실행
docker run --rm docker.pkg.github.com/owasp/cwe-tool/cwe-tool --id 22
docker run --rm docker.pkg.github.com/owasp/cwe-tool/cwe-tool --search test
Github 패키지 레지스트리에서 이미지를 가져와 검색 실행
docker pull docker.pkg.github.com/owasp/cwe-tool/cwe-tool:latest
docker run --rm docker.pkg.github.com/owasp/cwe-tool/cwe-tool:latest --search test
CWE 도구 출력은 데이터 처리나 추후 조사를 위해 JSON 형식입니다.
명령줄 옵션 개요:
npx cwe-tool --id 22
다음 명령은 트리 전체에서 특정 부모 ID에 대한 직접 또는 간접 관계를 만족하는지 여부에 따라 모든 CWE ID를 필터링합니다.
npx cwe-tool --id 22 --parent-id 167 --indirect
출력은 다음 JSON입니다:
{
"attr": {
"@_ID": "242",
"@_Name": "Use of Inherently Dangerous Function",
"@_Abstraction": "Base",
"@_Structure": "Simple",
"@_Status": "Draft"
},
"Description": "The program calls a function that can never be guaranteed to work safely.",
"Extended_Description": "Certain functions behave in dangerous ways regardless of how they are used. Functions in this category were often implemented without taking security concerns into account. The gets() function is unsafe because it does not perform bounds checking on the size of its input. An attacker can easily send arbitrarily-sized input to gets() and overflow the destination buffer. Similarly, the >> operator is unsafe to use when reading into a statically-allocated character array because it does not perform bounds checking on the size of its input. An attacker can easily send arbitrarily-sized input to the >> operator and overflow the destination buffer.",
"Related_Weaknesses": {
"Related_Weakness": {
"attr": {
"@_Nature": "ChildOf",
"@_CWE_ID": "1177",
"@_View_ID": "1000",
"@_Ordinal": "Primary"
}
}
},
"Weakness_Ordinalities": { "Weakness_Ordinality": { "Ordinality": "Primary" } },
"Applicable_Platforms": {
"Language": [
{ "attr": { "@_Name": "C", "@_Prevalence": "Undetermined" } },
{ "attr": { "@_Name": "C++", "@_Prevalence": "Undetermined" } }
]
},
"Modes_Of_Introduction": { "Introduction": { "Phase": "Implementation" } },
"Likelihood_Of_Exploit": "High",
"Common_Consequences": { "Consequence": { "Scope": "Other", "Impact": "Varies by Context" } },
"Potential_Mitigations": {
"Mitigation": [
{
"Phase": ["Implementation", "Requirements"],
"Description": "Ban the use of dangerous functions. Use their safe equivalent."
},
{
"Phase": "Testing",
"Description": "Use grep or static analysis tools to spot usage of dangerous functions."
}
]
},
"Demonstrative_Examples": {
"Demonstrative_Example": [
{
"Intro_Text": "The code below calls gets() to read information into a buffer.",
"Example_Code": {
"attr": { "@_Nature": "bad", "@_Language": "C" },
"xhtml:div": { "#text": "char buf[BUFSIZE];gets(buf);", "xhtml:br": "" }
},
"Body_Text": "The gets() function in C is inherently unsafe."
},
{
"attr": { "@_Demonstrative_Example_ID": "DX-5" },
"Intro_Text": "The code below calls the gets() function to read in data from the command line.",
"Example_Code": {
"attr": { "@_Nature": "bad", "@_Language": "C" },
"xhtml:div": {
"#text": "}",
"xhtml:div": {
"#text": "char buf[24];printf(\"Please enter your name and press <Enter>\\n\");gets(buf);...",
"attr": { "@_style": "margin-left:10px;" },
"xhtml:br": ["", "", ""]
}
}
},
"Body_Text": "However, the programmer uses the function gets() which is inherently unsafe because it blindly copies all input from STDIN to the buffer without checking size. This allows the user to provide a string that is larger than the buffer size, resulting in an overflow condition."
}
]
},
"Taxonomy_Mappings": {
"Taxonomy_Mapping": [
{
"attr": { "@_Taxonomy_Name": "7 Pernicious Kingdoms" },
"Entry_Name": "Dangerous Functions"
},
{
"attr": { "@_Taxonomy_Name": "CERT C Secure Coding" },
"Entry_ID": "POS33-C",
"Entry_Name": "Do not use vfork()",
"Mapping_Fit": "CWE More Abstract"
},
{
"attr": { "@_Taxonomy_Name": "Software Fault Patterns" },
"Entry_ID": "SFP3",
"Entry_Name": "Use of an improper API"
}
]
},
"References": {
"Reference": [
{ "attr": { "@_External_Reference_ID": "REF-6" } },
{
"attr": { "@_External_Reference_ID": "REF-194", "@_Section": "Chapter 5. Working with I/O" }
},
{
"attr": {
"@_External_Reference_ID": "REF-7",
"@_Section": "Chapter 5, "gets and fgets" Page 163"
}
}
]
},
"Content_History": {
"Submission": { "Submission_Name": "7 Pernicious Kingdoms", "Submission_Date": "2006-07-19" },
"Modification": [
{
"Modification_Name": "Sean Eidemiller",
"Modification_Organization": "Cigital",
"Modification_Date": "2008-07-01",
"Modification_Comment": "added/updated demonstrative examples"
},
{
"Modification_Name": "Eric Dalci",
"Modification_Organization": "Cigital",
"Modification_Date": "2008-07-01",
"Modification_Comment": "updated Potential_Mitigations"
},
{
"Modification_Name": "CWE Content Team",
"Modification_Organization": "MITRE",
"Modification_Date": "2008-09-08",
"Modification_Comment": "updated Applicable_Platforms, Relationships, Other_Notes, Taxonomy_Mappings, Type, Weakness_Ordinalities"
},
{
"Modification_Name": "CWE Content Team",
"Modification_Organization": "MITRE",
"Modification_Date": "2008-11-24",
"Modification_Comment": "updated Relationships, Taxonomy_Mappings"
},
{
"Modification_Name": "CWE Content Team",
"Modification_Organization": "MITRE",
"Modification_Date": "2009-10-29",
"Modification_Comment": "updated Description, Other_Notes, References"
},
{
"Modification_Name": "CWE Content Team",
"Modification_Organization": "MITRE",
"Modification_Date": "2010-02-16",
"Modification_Comment": "updated Demonstrative_Examples, References, Relationships"
},
{
"Modification_Name": "CWE Content Team",
"Modification_Organization": "MITRE",
"Modification_Date": "2010-04-05",
"Modification_Comment": "updated Relationships"
},
{
"Modification_Name": "CWE Content Team",
"Modification_Organization": "MITRE",
"Modification_Date": "2011-06-01",
"Modification_Comment": "updated Common_Consequences"
},
{
"Modification_Name": "CWE Content Team",
"Modification_Organization": "MITRE",
"Modification_Date": "2011-06-27",
"Modification_Comment": "updated Common_Consequences"
},
{
"Modification_Name": "CWE Content Team",
"Modification_Organization": "MITRE",
"Modification_Date": "2012-05-11",
"Modification_Comment": "updated Relationships"
},
{
"Modification_Name": "CWE Content Team",
"Modification_Organization": "MITRE",
"Modification_Date": "2012-10-30",
"Modification_Comment": "updated Potential_Mitigations"
},
{
"Modification_Name": "CWE Content Team",
"Modification_Organization": "MITRE",
"Modification_Date": "2014-07-30",
"Modification_Comment": "updated Demonstrative_Examples, Relationships, Taxonomy_Mappings"
},
{
"Modification_Name": "CWE Content Team",
"Modification_Organization": "MITRE",
"Modification_Date": "2017-11-08",
"Modification_Comment": "updated Causal_Nature, References, Relationships, Taxonomy_Mappings"
},
{
"Modification_Name": "CWE Content Team",
"Modification_Organization": "MITRE",
"Modification_Date": "2018-03-27",
"Modification_Comment": "updated References"
},
{
"Modification_Name": "CWE Content Team",
"Modification_Organization": "MITRE",
"Modification_Date": "2019-01-03",
"Modification_Comment": "updated Relationships"
},
{
"Modification_Name": "CWE Content Team",
"Modification_Organization": "MITRE",
"Modification_Date": "2020-02-24",
"Modification_Comment": "updated References, Relationships"
}
],
"Previous_Entry_Name": [
{ "#text": "Dangerous Functions", "attr": { "@_Date": "2008-01-30" } },
{ "#text": "Use of Inherently Dangerous Functions", "attr": { "@_Date": "2008-04-11" } }
]
}
}
이 프로젝트에 기여하기 위한 지침은 CONTRIBUTING을 참조하세요.
cwe-tool © Liran Tal, Apache-2.0 라이선스로 배포됩니다.
| command-line argument | 설명 | 구현됨 |
|---|
--id | ID로 CWE 데이터를 가져옵니다. | ✅ |
--parent-id | --id와 --parent-id가 모두 제공되면, 부모 ID를 만족하는 CWE ID만 반환합니다. | ✅ PR 환영 |
--indirect | --parent-id와 함께 지정하면 트리의 루트까지 모든 간접 부모를 검색합니다. | ✅ |
--search | 문자열 검색으로 일치하는 모든 CWE 제목을 반환합니다. | ✅ |
--show-membership | 모든 CWE ID와 해당 CWE 카테고리 소속 관계를 반환합니다. | ❌ PR 환영 |