
Java, Go, Python, C#, Kotlin, PHP, Kubernetes 및 GitHub Actions 전반에서 취약점 탐지와 감사 중심 코드 리뷰를 위한 정적 분석 보안 규칙입니다.
elttam의 공개 semgrep 규칙 저장소에 오신 것을 환영합니다.

우리는 코드 지원 보안 감사와 소프트웨어 보안 연구 중에 규칙을 정기적으로 개발합니다. semgrep 커뮤니티를 위해 새 규칙을 자주 추가하고 여기에 있는 내용을 개선할 것입니다. semgrep을 사용하는 제품 보안 엔지니어와 코드 감사자에게 이 규칙들이 유용하게 사용되기를 바랍니다!
버그를 발견하면 GitHub 이슈를 올려 주세요.
이 가이드는 Semgrep에 익숙하고 이미 설치되어 있다고 가정합니다.
이 저장소는 규칙을 두 가지 광범위한 범주로 나눕니다:
rules/ -- 개발자나 AppSec 팀에 유용한 규칙으로, 일반적으로 취약점입니다.rules-audit/ -- 소스 코드 감사, 흥미로운 동작 식별, 진입점 열거에 유용한 규칙으로, 수동 소스 코드 검토를 보완합니다.다음 명령으로 이 저장소를 테스트하세요:
git clone https://github.com/elttam/semgrep-rules.git
규칙을 테스트하려면 다음을 실행하세요:
semgrep --config semgrep-rules/rules semgrep-rules/rules/
감사 중심 규칙을 테스트하려면 다음을 실행하세요:
semgrep --config semgrep-rules/rules-audit semgrep-rules/rules-audit/
이 규칙들은 취약점이나 기타 약점을 식별하는 데 중점을 둡니다.
이 규칙들은 흥미로운 동작을 식별하거나 진입점을 열거하여 수동 소스 코드 검토를 돕는 데 유용합니다.
| 규칙 경로 | 언어 | 기술 | 설명 |
|---|
| generic/jsp-likely-xss | Generic | JSP | 템플릿에서 안전하지 않은 렌더링으로 인한 XSS 탐지 |
| go/lang/security/audit/executable-symlink | Go | os.Executable을 사용한 잠재적 심볼릭 링크 탈취 | |
| go/lang/security/audit/sprintf-plain-string | Go | 이스케이프되지 않은 제어 문자가 포함된 Sprintf | |
| go/lang/security/audit/uintptr-nonatomic | Go | 변환된 uintptr의 비원자적 사용 | |
| java/lang/security/audit/crypto/gcm-static-iv | Java | 키와 IV에 동일한 값을 사용하는 GCM 찾기 | |
| java/lang/security/audit/crypto/randomstringutils | Java | Apache Commons | 보안에 적합하지 않은 기본 java.util.Random을 사용하는 RandomStringUtils 찾기 |
| java/spring/security/audit/remoting/ | Java | Spring | Spring Remoting 사용 찾기 |
| php/php-filter-chain-read-from-oracle | PHP | 오라클 기반 PHP 필터 체인 오류 가능성 탐지 | |
| yaml/github-actions/security/save-state | YAML | Github-Actions | 안전하지 않고 더 이상 사용되지 않는 ::save-state 사용 찾기 |
| yaml/github-actions/security/set-output | YAML | Github-Actions | 안전하지 않고 더 이상 사용되지 않는 ::set-output 사용 찾기 |
| yaml/kubernetes/audit/network-policy-ingress-any | YAML | Kubernetes | Ingress가 ANY를 허용하는 NetworkPolicy가 있는 컨테이너 스펙 찾기 |
| yaml/kubernetes/audit/privileged-container | YAML | Kubernetes | 보안 컨텍스트가 privileged인 컨테이너 스펙 찾기 |
| yaml/kubernetes/security/allow-privileged-escalation | YAML | Kubernetes | init 컨테이너를 포함하여 권한 상승을 허용하는 (allowPrivilegeEscalation) 컨테이너 스펙 찾기 |
| yaml/kubernetes/security/no-security-context | YAML | Kubernetes | 보안 컨텍스트가 없는 컨테이너 스펙 찾기. 파드 또는 컨테이너 보안 컨텍스트를 고려합니다. |
| yaml/kubernetes/security/run-as-non-root | YAML | Kubernetes | 루트로 실행을 허용하는 (runAsNonRoot 누락) 컨테이너 스펙 찾기. 파드 및 컨테이너 보안 컨텍스트를 고려합니다 PR |
| yaml/kubernetes/security/run-as-non-root-unsafe-value | YAML | Kubernetes | 명시적으로 루트 실행을 허용하는 (runAsNonRoot: false) 컨테이너 스펙 찾기. 파드 및 컨테이너 보안 컨텍스트를 고려합니다 PR |
| 규칙 경로 | 언어 | 기술 | 설명 |
|---|
| c/lang/security/audit/exec | C | 프로세스 실행 찾기 | |
| csharp/dotnet/security/audit/entrypoints/apsnet-controller | C# | ASP.NET | ASP.NET REST 진입점 찾기 |
| java/jackson/polymorphic-typing | Java | Jackson | 취약한 Jackson 역직렬화 문제를 찾는 데 도움이 되도록 다형성 타이핑 찾기 |
| java/jackson/type-resolver-override | Java | Jackson | TypeResolveBuilder를 사용하는 다형성 타이핑 찾기 |
| java/jax-rs/security/audit/entrypoints/ | Java | JAX-RS | JAX-RS REST 진입점 찾기 |
| java/lang/security/audit/processbuilder | Java | ProcessBuilder로 프로세스 실행 찾기 | |
| java/spring/security/audit/entrypoints/ | Java | Spring | Spring REST 진입점 찾기 |
| java/struts2/security/audit/devmode/ | Java | Struts2 | devMode 사용 찾기 |
| java/struts2/security/audit/dmi/ | Java | Struts2 | 동적 메서드 호출(Dynamic Method Invocation) 사용 찾기 |
| java/struts2/security/audit/entrypoints/ | Java | Struts2 | Struts2 REST 진입점 찾기 |
| java/xstream/security/audit/fromxml | Java | XStream | XStream.fromXML(...) 사용 찾기 |
| kotlin/spark/security/audit/entrypoints/ | Kotlin | Spark | Spark REST 진입점 찾기 |
| python/flask/security/audit/entrypoints/ | Python | Flask | Flask REST 진입점 찾기 |