
Raccolta di regole Semgrep per l'analisi statica del codice, il rilevamento delle vulnerabilità di sicurezza e l'applicazione di pratiche di codifica sicura in più linguaggi.
Questo repository contiene regole Semgrep sviluppate da Trail of Bits e rese disponibili al pubblico. Fanno parte dei nostri sforzi di sviluppo in corso e vengono utilizzate nei nostri audit di sicurezza, nella ricerca di vulnerabilità e nei progetti interni. Si evolveranno nel tempo man mano che individueremo nuove tecniche.
Visita il Testing Handbook per una guida su Semgrep.
Il modo più semplice per eseguire le regole è eseguirle dal Semgrep registry. Per farlo, vai alla cartella root del tuo progetto ed esegui il seguente comando:```shell $ semgrep --config "p/trailofbits"
In alternativa, puoi clonare questo repository, spostarti nella cartella principale del tuo progetto ed eseguire singole regole usando il comando qui sotto :```shell
$ semgrep --config /path/to/semgrep-rules/semgreprule.yml
Per eseguire tutte le regole dal repository clonato:```shell $ semgrep --config /path/to/semgrep-rules/ .
## Flag utili
Semgrep verrà eseguito su tutti i file di codice supportati tranne quelli nel tuo file `.gitignore`. Se vuoi eseguire le regole su tutti i file e le directory, inclusi quelli nel tuo `.gitignore`, aggiungi il flag `--no-git-ignore`.```shell
$ semgrep --config /path/to/semgrep-rules/ . --no-git-ignore
Puoi anche dire a Semgrep di ignorare file e directory che corrispondono a qualsiasi pattern. Ad esempio, se vuoi dire a Semgrep di ignorare tutti i file di test Go, puoi eseguire il seguente comando:```shell $ semgrep --config /path/to/semgrep-rules/ . --exclude='*_test.go'
Usa `-o` per inviare i risultati a un file:```shell
$ semgrep --config /path/to/semgrep-rules/hanging-goroutine.yml -o leaks.txt'
| ID | Playground | Impatto | Confidenza | Descrizione |
|---|---|---|---|---|
| eth-rpc-tracetransaction | 🛝🔗 | 🟥 | 🌕 | Rileva i tentativi di estrarre informazioni di trace da una transazione o da un blocco EVM. Nelle applicazioni di exchange o bridge, è necessario implementare una logica aggiuntiva che incapsuli questi endpoint per evitare che i valori trasferiti durante i frame di chiamata ripristinati vengano conteggiati. |
| eth-txreceipt-status | 🛝🔗 | 🟥 | 🌕 | Rileva quando viene letto lo stato di una ricevuta di transazione |
| hanging-goroutine | 🛝🔗 | 🟩 | 🌗 | Perdite di goroutine |
| invalid-usage-of-modified-variable | 🛝🔗 | 🟧 | 🌘 | Possibile assegnazione involontaria quando si verifica un errore |
| iterate-over-empty-map | 🛝🔗 | 🟩 | 🌗 | Probabile iterazione ridondante su una mappa vuota |
| missing-runlock-on-rwmutex | 🛝🔗 | 🟧 | 🌗 | Manca RUnlock su un lock RWMutex prima di restituire il controllo da una funzione |
| missing-unlock-before-return | 🛝🔗 | 🟧 | 🌗 | Manca lo sblocco del mutex prima di ritornare da una funzione |
| nil-check-after-call | 🛝🔗 | 🟧 | 🌗 | Possibili dereferenziamenti di nil |
| racy-append-to-slice | 🛝🔗 | 🟧 | 🌗 | Chiamate concorrenti ad append da più goroutine |
| racy-write-to-map | 🛝🔗 | 🟧 | 🌗 | Scritture concorrenti sulla stessa mappa in più goroutine |
| servercodec-readrequestbody-unhandled-nil | 🛝🔗 | 🟩 | 🌘 | Possibile implementazione non corretta dell'interfaccia ServerCodec |
| string-to-int-signedness-cast | 🛝🔗 | 🟧 | 🌘 | Underflow di interi |
| sync-mutex-value-copied | 🛝🔗 | 🟩 | 🌘 | Copia di sync.Mutex tramite ricevitori per valore |
| unmarshal-tag-is-dash | 🛝🔗 | 🟧 | 🌘 | |
| unmarshal-tag-is-omitempty | 🛝🔗 | 🟩 | 🌘 | |
| unsafe-dll-loading | 🛝🔗 | 🟥 | 🌘 | Uso di una funzione vulnerabile ad attacchi di hijacking di DLL |
| waitgroup-add-called-inside-goroutine | 🛝🔗 | 🟧 | 🌗 | Chiamate a sync.WaitGroup.Add all'interno di goroutine anonime |
| waitgroup-wait-inside-loop | 🛝🔗 | 🟧 | 🌗 | Chiamate a sync.WaitGroup.Wait all'interno di un ciclo |