gokart v0.3 releases: static analysis tool for securing Go code
GoKart – Go Security Static Analysis
GoKart is a static analysis tool for Go that finds vulnerabilities using the SSA (single static assignment) form of Go source code. It is capable of tracing the source of variables and function arguments to determine whether input sources are safe, which reduces the number of false positives compared to other Go security scanners. For instance, a SQL query that is concatenated with a variable might traditionally be flagged as SQL injection; however, GoKart can figure out if the variable is actually a constant or constant equivalent, in which case there is no vulnerability.
Why We Built GoKart
Static analysis is a powerful technique for finding vulnerabilities in source code. However, the approach has suffered from being noisy – that is, many static analysis tools find quite a few “vulnerabilities” that are not actually real. This has led to developer friction as users get tired of the tools “crying wolf” one time too many.
The motivation for GoKart was to address this: could we create a scanner with significantly lower false-positive rates than existing tools? Based on our experimentation the answer is yes. By leveraging source-to-sink tracing and SSA, GoKart is capable of tracking variable taint between variable assignments, significantly improving the accuracy of findings. Our focus is on usability: pragmatically, that means we have optimized our approaches to reduce false alarms.
For more information, please read our blog post.
- #3 Output findings to file CLI flag
- #34 Verbose output source parent function fix
- #17 Add exit code on findings flag
- #41 Update remote scanning functionality to include private repos
- #26 Add basic dockerfile and README
- #43 CWE mappings for findings
- #29 Output total findings information
- #45 Output findings as json
- #46 Highlight relevant finding lines
- #8 Channel incorrectly identified as source of untrusted input
- #34 Verbose trace has incorrect parent signatures
- #10 panic: err: go command required
- #2 panic: index out of range
Copyright (C) 2021 praetorian-inc