
여러 언어에 걸친 정적 코드 분석, 보안 취약점 탐지, 안전한 코딩 관행 적용을 위한 Semgrep 규칙 모음입니다.
이 저장소에는 Trail of Bits가 개발하여 공개한 Semgrep 규칙이 포함되어 있습니다. 이 규칙은 지속적인 개발 노력의 일부이며 보안 감사, 취약점 연구 및 내부 프로젝트에 사용됩니다. 새로운 기술을 식별함에 따라 시간이 지나면서 발전할 것입니다.
Semgrep 지침은 Testing Handbook을 방문하세요.
규칙을 실행하는 가장 쉬운 방법은 Semgrep 레지스트리에서 실행하는 것입니다. 그러려면 프로젝트의 루트 폴더로 이동하여 다음을 실행하세요:```shell $ semgrep --config "p/trailofbits"
또는 이 저장소를 클론하고 프로젝트의 루트 폴더로 이동한 다음, 아래 명령을 사용하여 개별 규칙을 실행할 수 있습니다:```shell
$ semgrep --config /path/to/semgrep-rules/semgreprule.yml
클론된 저장소에서 모든 규칙을 실행하려면:```shell $ semgrep --config /path/to/semgrep-rules/ .
## 유용한 플래그
Semgrep는 `.gitignore` 파일에 있는 파일을 제외한 모든 지원되는 코드 파일에 대해 실행됩니다. `.gitignore`에 있는 파일을 포함한 모든 파일과 디렉터리에 규칙을 실행하려면 `--no-git-ignore` 플래그를 추가하세요.```shell
$ semgrep --config /path/to/semgrep-rules/ . --no-git-ignore
또한 Semgrep에게 특정 패턴과 일치하는 파일 및 디렉터리를 무시하도록 지시할 수 있습니다. 예를 들어, 모든 Go 테스트 파일을 무시하도록 Semgrep에 지시하려면 다음을 실행하면 됩니다:```shell $ semgrep --config /path/to/semgrep-rules/ . --exclude='*_test.go'
`-o`를 사용하여 결과를 파일로 출력합니다:```shell
$ semgrep --config /path/to/semgrep-rules/hanging-goroutine.yml -o leaks.txt'
| -- | :--------: | :----: | :--------: | ----------- | | apt-key-unencrypted-url | 🛝🔗 | 🟥 | 🌘 | | | apt-key-validate-certs-disabled | 🛝🔗 | 🟥 | 🌘 | | | apt-unencrypted-url | 🛝🔗 | 🟥 | 🌘 | | | dnf-unencrypted-url | 🛝🔗 | 🟥 | 🌘 | | | dnf-validate-certs-disabled | 🛝🔗 | 🟥 | 🌘 | | | get-url-unencrypted-url | 🛝🔗 | 🟥 | 🌘 | | | get-url-validate-certs-disabled | 🛝🔗 | 🟥 | 🌘 | | | rpm-key-unencrypted-url | 🛝🔗 | 🟥 | 🌘 | | | rpm-key-validate-certs-disabled | | 🟥 | 🌘 | | | | | 🟥 | 🌘 | | | | | 🟥 | 🌘 | | | | | 🟥 | 🌘 | | | | | 🟥 | 🌘 | | | | | 🟥 | 🌘 | | | | | 🟥 | 🌘 | | | | | 🟥 | 🌘 | | | | | 🟩 | 🌕 | | | | | 🟧 | 🌘 | | | | | 🟧 | 🌘 | | | | | 🟧 | 🌘 | | | | | 🟧 | 🌘 | | | | | 🟧 | 🌘 | | | | | 🟧 | 🌘 | | | | | 🟧 | 🌘 | |
| ID | 플레이그라운드 | 영향 | 신뢰도 | 설명 |
|---|---|---|---|---|
| insecure-url-host-hassuffix-check | 🛝🔗 |
Pull Request와 이슈는 언제나 환영합니다!
자세한 내용은 CONTRIBUTING.md를 참조하세요.
이 저장소에 정의된 규칙은 AGPLv3에 따라 라이선스가 부여됩니다.
사이드카 예제 는 다른 저작물에서 파생되었을 수 있으며, 필요한 경우 원래 라이선스를 유지합니다.
| ID | Playground | 영향도 | 신뢰도 | 설명 |
|---|
| eth-rpc-tracetransaction | 🛝🔗 | 🟥 | 🌕 | EVM 트랜잭션 또는 블록에서 트레이스 정보를 추출하려는 시도를 감지합니다. 교환 또는 브리지 애플리케이션에서는 이러한 엔드포인트를 캡슐화하는 추가 로직을 구현하여 되돌려진 호출 프레임 중에 전송된 값이 계산되지 않도록 해야 합니다. |
| eth-txreceipt-status | 🛝🔗 | 🟥 | 🌕 | 트랜잭션 영수증의 상태가 읽힐 때를 감지합니다. |
| hanging-goroutine | 🛝🔗 | 🟩 | 🌗 | 고루틴 누수 |
| invalid-usage-of-modified-variable | 🛝🔗 | 🟧 | 🌘 | 오류 발생 시 의도하지 않은 할당 가능성 |
| iterate-over-empty-map | 🛝🔗 | 🟩 | 🌗 | 빈 맵에 대한 중복 반복일 가능성이 있습니다. |
| missing-runlock-on-rwmutex | 🛝🔗 | 🟧 | 🌗 | 함수에서 반환하기 전에 RWMutex 잠금에 대한 RUnlock 누락 |
| missing-unlock-before-return | 🛝🔗 | 🟧 | 🌗 | 함수에서 반환하기 전에 mutex 잠금 해제 누락 |
| nil-check-after-call | 🛝🔗 | 🟧 | 🌗 | 가능한 nil 역참조 |
| racy-append-to-slice | 🛝🔗 | 🟧 | 🌗 | 여러 고루틴에서 append에 대한 동시 호출 |
| racy-write-to-map | 🛝🔗 | 🟧 | 🌗 | 여러 고루틴에서 동일한 맵에 대한 동시 쓰기 |
| servercodec-readrequestbody-unhandled-nil | 🛝🔗 | 🟩 | 🌘 | 잠재적으로 잘못된 ServerCodec 인터페이스 구현 |
| string-to-int-signedness-cast | 🛝🔗 | 🟧 | 🌘 | 정수 언더플로 |
| sync-mutex-value-copied | 🛝🔗 | 🟩 | 🌘 | 값 수신기를 통한 sync.Mutex 복사 |
| unmarshal-tag-is-dash | 🛝🔗 | 🟧 | 🌘 | |
| unmarshal-tag-is-omitempty | 🛝🔗 | 🟩 | 🌘 | |
| unsafe-dll-loading | 🛝🔗 | 🟥 | 🌘 | DLL 하이재킹 공격에 취약한 함수 사용 |
| waitgroup-add-called-inside-goroutine | 🛝🔗 | 🟧 | 🌗 | 익명 고루틴 내부의 sync.WaitGroup.Add 호출 |
| waitgroup-wait-inside-loop | 🛝🔗 | 🟧 | 🌗 | 루프 내부의 sync.WaitGroup.Wait 호출 |
| ID | Playground | 영향도 | 신뢰도 | 설명 |
|---|
| automatic-memory-pinning | 🛝🔗 | 🟩 | 🌘 | PyTorch 메모리가 자동으로 고정되지 않음 |
| lxml-in-pandas | 🛝🔗 | 🟧 | 🌘 | pandas에서 lxml 로드로 인한 잠재적 XXE 공격 |
| msgpack-numpy | 🛝🔗 | 🟥 | 🌗 | 피클링에 의존하는 함수로 인한 잠재적 임의 코드 실행 |
| numpy-distutils | 🛝🔗 | 🟩 | 🌘 | 더 이상 사용되지 않는 numpy.distutils 사용 |
| numpy-f2py-compile | 🛝🔗 | 🟥 | 🌗 | NumPy f2py 컴파일로 인한 잠재적 임의 코드 실행 |
| numpy-in-pytorch-datasets | 🛝🔗 | 🟩 | 🌘 | Torch 데이터셋 내부의 NumPy RNG 호출 |
| numpy-in-pytorch-modules | 🛝🔗 | 🌫️ | 🌗 | PyTorch 모듈 내부의 NumPy 함수 사용 |
| numpy-load-library | 🛝🔗 | 🟥 | 🌗 | NumPy 라이브러리 로드로 인한 잠재적 임의 코드 실행 |
| onnx-session-options | 🛝🔗 | 🟥 | 🌗 | ONNX 라이브러리 로드로 인한 잠재적 임의 코드 실행 |
| pandas-eval | 🛝🔗 | 🟥 | 🌕 | 사용자 제공 표현식을 평가하는 pandas 함수로 인한 잠재적 임의 코드 실행 |
| pickles-in-keras-deprecation | 🛝🔗 | 🟥 | 🌗 | Keras의 load_model 함수로 인한 잠재적 임의 코드 실행 |
| pickles-in-keras | 🛝🔗 | 🟥 | 🌗 | Keras의 load_model 함수로 인한 잠재적 임의 코드 실행 |
| pickles-in-numpy | 🛝🔗 | 🟥 | 🌗 | 피클링에 의존하는 NumPy 함수로 인한 잠재적 임의 코드 실행 |
| pickles-in-pandas | 🛝🔗 | 🟥 | 🌗 | 피클링에 의존하는 Pandas 함수로 인한 잠재적 임의 코드 실행 |
| pickles-in-pytorch-distributed | 🛝🔗 | 🟥 | 🌗 | 피클링에 의존하는 PyTorch.Distributed 함수로 인한 잠재적 임의 코드 실행 |
| pickles-in-pytorch | 🛝🔗 | 🟥 | 🌗 | 피클링에 의존하는 PyTorch 함수로 인한 잠재적 임의 코드 실행 |
| pickles-in-tensorflow | 🛝🔗 | 🟥 | 🌗 | tensorflow의 load 함수로 인한 잠재적 임의 코드 실행 |
| pytorch-classes-load-library | 🛝🔗 | 🟥 | 🌗 | PyTorch 라이브러리 로드로 인한 잠재적 임의 코드 실행 |
| pytorch-package | 🛝🔗 | 🟥 | 🌕 | torch.package로 인한 잠재적 임의 코드 실행 |
| pytorch-tensor | 🛝🔗 | 🌫️ | 🌘 | 부적절한 텐서 생성으로 인한 잠재적 구문 분석 문제 및 비효율성 |
| scikit-joblib-load | 🛝🔗 | 🟥 | 🌗 | 피클링에 의존하는 SciKit.Joblib 함수로 인한 잠재적 임의 코드 실행 |
| tarfile-extractall-traversal | 🛝🔗 | 🟧 | 🌗 | tarfile에 대한 extractall 호출에서 잠재적 경로 순회 |
| tensorflow-load-library | 🛝🔗 | 🟥 | 🌗 | TensorFlow 라이브러리 로드로 인한 잠재적 임의 코드 실행 |
| waiting-with-pytorch-distributed | 🛝🔗 | 🟩 | 🌗 | 요청을 기다리지 않을 때 발생할 수 있는 PyTorch 정의되지 않은 동작 |
| ID | Playground | 영향도 | 신뢰도 | 설명 |
|---|
| panic-in-function-returning-result | 🛝🔗 | 🟩 | 🌘 | Result를 반환하는 함수에서 unwrap 또는 expect 호출 |
| ID | Playground | 영향도 | 신뢰도 | 설명 |
|---|
| schema-directives | 🛝🔗 | 🟥 | 🌗 | 오래된 ApolloServer 옵션 'schemaDirectives' 사용 |
| use-of-graphql-upload | 🛝🔗 | 🟧 | 🌕 | graphql-upload 라이브러리 사용 |
| v3-potentially-bad-cors | 🛝🔗 | 🟧 | 🌕 | 잠재적으로 잘못된 CORS 정책 |
| v3-express-bad-cors | 🛝🔗 | 🟥 | 🌗 | 잘못된 CORS 정책 |
| v3-express-no-cors | 🛝🔗 | 🟩 | 🌘 | CORS 정책 부재 |
| v3-bad-cors | 🛝🔗 | 🟥 | 🌗 | 잘못된 CORS 정책 |
| v3-no-cors | 🛝🔗 | 🟩 | 🌘 | CORS 정책 부재 |
| v3-csrf-prevention | 🛝🔗 | 🟧 | 🌘 | CSRF 방지 부재 |
| v4-csrf-prevention | 🛝🔗 | 🟧 | 🌘 | CSRF 보호 비활성화됨 |
| ID | Playground | 영향도 | 신뢰도 | 설명 |
|---|
| ID | Playground | 영향도 | 신뢰도 | 설명 |
|---|
| ID | Playground | 영향도 | 신뢰도 | 설명 |
|---|
| gc-call | 🛝🔗 | 🟩 | 🌘 | |
| mongo-hostname-verification-disabled | 🛝🔗 | 🟥 | 🌘 |
| ID | 플레이그라운드 | 영향 | 신뢰도 | 설명 |
|---|
| 🌫️ |
| 🌘 |