mirror of
https://github.com/securego/gosec.git
synced 2024-11-06 03:55:50 +00:00
e3b1d33b95
This re-works the way that CLI options are passed through to the analyzer so that they can act as overrides for config options. If not given on the CLI, options will come from a config file. If no file is used then a default value is chosen. Two lists are also populated with tests to include or exclude. These lists are not used for now but will eventually replace the way we select test to run in a future patch to follow.
124 lines
3 KiB
Go
124 lines
3 KiB
Go
// (c) Copyright 2016 Hewlett Packard Enterprise Development LP
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package rules
|
|
|
|
import (
|
|
"testing"
|
|
|
|
gas "github.com/HewlettPackard/gas/core"
|
|
)
|
|
|
|
func TestSubprocess(t *testing.T) {
|
|
config := map[string]interface{}{"ignoreNosec": false}
|
|
analyzer := gas.NewAnalyzer(config, nil)
|
|
analyzer.AddRule(NewSubproc())
|
|
|
|
issues := gasTestRunner(`
|
|
package main
|
|
|
|
import (
|
|
"log"
|
|
"os/exec"
|
|
)
|
|
|
|
func main() {
|
|
val := "/bin/" + "sleep"
|
|
cmd := exec.Command(val, "5")
|
|
err := cmd.Start()
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
log.Printf("Waiting for command to finish...")
|
|
err = cmd.Wait()
|
|
log.Printf("Command finished with error: %v", err)
|
|
}`, analyzer)
|
|
|
|
checkTestResults(t, issues, 1, "Subprocess launching should be audited.")
|
|
}
|
|
|
|
func TestSubprocessVar(t *testing.T) {
|
|
config := map[string]interface{}{"ignoreNosec": false}
|
|
analyzer := gas.NewAnalyzer(config, nil)
|
|
analyzer.AddRule(NewSubproc())
|
|
|
|
issues := gasTestRunner(`
|
|
package main
|
|
|
|
import (
|
|
"log"
|
|
"os/exec"
|
|
)
|
|
|
|
func main() {
|
|
run := "sleep" + someFunc()
|
|
cmd := exec.Command(run, "5")
|
|
err := cmd.Start()
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
log.Printf("Waiting for command to finish...")
|
|
err = cmd.Wait()
|
|
log.Printf("Command finished with error: %v", err)
|
|
}`, analyzer)
|
|
|
|
checkTestResults(t, issues, 1, "Subprocess launching with variable.")
|
|
}
|
|
|
|
func TestSubprocessPath(t *testing.T) {
|
|
config := map[string]interface{}{"ignoreNosec": false}
|
|
analyzer := gas.NewAnalyzer(config, nil)
|
|
analyzer.AddRule(NewSubproc())
|
|
|
|
issues := gasTestRunner(`
|
|
package main
|
|
|
|
import (
|
|
"log"
|
|
"os/exec"
|
|
)
|
|
|
|
func main() {
|
|
cmd := exec.Command("sleep", "5")
|
|
err := cmd.Start()
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
log.Printf("Waiting for command to finish...")
|
|
err = cmd.Wait()
|
|
log.Printf("Command finished with error: %v", err)
|
|
}`, analyzer)
|
|
|
|
checkTestResults(t, issues, 1, "Subprocess launching with partial path.")
|
|
}
|
|
|
|
func TestSubprocessSyscall(t *testing.T) {
|
|
config := map[string]interface{}{"ignoreNosec": false}
|
|
analyzer := gas.NewAnalyzer(config, nil)
|
|
analyzer.AddRule(NewSubproc())
|
|
|
|
issues := gasTestRunner(`
|
|
package main
|
|
|
|
import (
|
|
"log"
|
|
"os/exec"
|
|
)
|
|
|
|
func main() {
|
|
syscall.Exec("/bin/cat", []string{ "/etc/passwd" }, nil)
|
|
}`, analyzer)
|
|
|
|
checkTestResults(t, issues, 1, "Subprocess launching should be audited.")
|
|
}
|