Documentation
¶
Overview ¶
Package summary provides function summaries for a range of standard library functions that could be involved in a taint propagation. Function summaries describe the taint-propagation behavior of a given function, e.g. "if these arguments are tainted, then the following arguments/return values should also be tainted".
Package summary provides function summaries for a range of standard library functions that could be involved in a taint propagation. Function summaries describe the taint-propagation behavior of a given function, e.g. "if these arguments are tainted, then the following arguments/return values should also be tainted".
Index ¶
Constants ¶
This section is empty.
Variables ¶
var FuncSummaries = map[string]Summary{}/* 192 elements not displayed */
FuncSummaries contains summaries for regular functions that could be called statically.
var InterfaceFuncSummaries = map[funcKey]Summary{ {"Read", "([]byte)(int,error)"}: { IfTainted: first, TaintedArgs: []int{1}, }, {"Write", "([]byte)(int,error)"}: { IfTainted: second, TaintedArgs: []int{0}, }, {"ReadFrom", "(Reader)(int64,error)"}: { IfTainted: second, TaintedArgs: []int{0}, }, {"WriteTo", "(Writer)(int64,error)"}: { IfTainted: first, TaintedArgs: []int{1}, }, {"ReadAt", "([]byte,int64)(int,error)"}: { IfTainted: first, TaintedArgs: []int{1}, }, {"WriteAt", "([]byte,int64)(int,error)"}: { IfTainted: second, TaintedArgs: []int{0}, }, {"WriteString", "(string)(int,error)"}: { IfTainted: second, TaintedArgs: []int{0}, }, {"String", "()(string)"}: { IfTainted: first, TaintedRets: []int{0}, }, {"GoString", "()(string)"}: { IfTainted: first, TaintedRets: []int{0}, }, {"Error", "()(string)"}: { IfTainted: first, TaintedRets: []int{0}, }, {"Unwrap", "()(error)"}: { IfTainted: first, TaintedRets: []int{0}, }, {"Bytes", "()([]byte)"}: { IfTainted: first, TaintedRets: []int{0}, }, {"Err", "()(error)"}: { IfTainted: first, TaintedRets: []int{0}, }, {"Value", "(interface{})(interface{})"}: { IfTainted: first, TaintedRets: []int{0}, }, }
InterfaceFuncSummaries contains summaries for common interface functions such as Write or Read, that could be called statically (i.e. a call to a concrete method whose signature matches an interface method) or dynamically (i.e. a call to an interface method on an interface value). Since all of these functions have receivers, the "first" argument in `ifTainted` always corresponds to the receiver.
Functions ¶
This section is empty.
Types ¶
type Summary ¶
type Summary struct { // IfTainted is a bitset which contains positions for parameters // such that if one of these parameters is tainted, taint should // be propagated to the arguments and return values. // There is a 1-to-1 mapping between the bits and the function's // parameters, with the least significant bit corresponding to the // first (0th) argument. IfTainted int64 // the positions of the arguments that taint propagates to if one of the // positions in ifTainted is tainted TaintedArgs []int // the positions of the return values that taint propagates to if one of the // positions in ifTainted is tainted TaintedRets []int }
A Summary captures the behavior of a function with respect to taint propagation. Specifically: given that at least one of the necessary arguments is tainted, which arguments/return values become tainted? Note that when it's present, the receiver counts as an argument.
As an example, consider fmt.Fprintf:
func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error) {
Its Summary is:
"fmt.Fprintf": { ifTainted: 0b110, taintedArgs: []int{0}, },
In English, this says that if the format string or the varargs slice are tainted, then the Writer is tainted. (In an actual summary, 0b110 should be written as second | third for readability.)
func For ¶
func For(call ssa.CallInstruction) *Summary
For returns the summary for a given call if it exists, or nil if no summary matches the called function.