Skip to content

Commit 59d82b3

Browse files
committed
Make log injection tests more realistic
1 parent 009e0e1 commit 59d82b3

File tree

1 file changed

+98
-57
lines changed

1 file changed

+98
-57
lines changed

go/ql/test/query-tests/Security/CWE-117/LogInjection.go

Lines changed: 98 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -30,52 +30,54 @@ import (
3030

3131
func handler(req *http.Request, ctx *goproxy.ProxyCtx) {
3232
username := req.URL.Query()["username"][0]
33-
slice := []any{"username", username}
33+
password := req.URL.Query()["password"][0]
34+
formatString := req.URL.Query()["formatString"][0]
3435
testFlag := req.URL.Query()["testFlag"][0]
36+
slice := []any{"username", username}
3537

3638
{
37-
fmt.Print(username) // $ hasTaintFlow="username"
38-
fmt.Printf(username) // $ hasTaintFlow="username"
39-
fmt.Println(username) // $ hasTaintFlow="username"
40-
fmt.Fprint(nil, username) // Fprint functions are only loggers if they target stdout/stderr
41-
fmt.Fprintf(nil, username)
42-
fmt.Fprintln(nil, username)
39+
fmt.Print(username, password) // $ hasTaintFlow="username" hasTaintFlow="password"
40+
fmt.Printf(formatString, username, password) // $ hasTaintFlow="formatString" hasTaintFlow="username" hasTaintFlow="password"
41+
fmt.Println(username, password) // $ hasTaintFlow="username" hasTaintFlow="password"
42+
fmt.Fprint(nil, username, password) // Fprint functions are only loggers if they target stdout/stderr
43+
fmt.Fprintf(nil, formatString, username, password)
44+
fmt.Fprintln(nil, username, password)
4345
}
4446
// log
4547
{
46-
log.Print("user %s logged in.\n", username) // $ hasTaintFlow="username"
47-
log.Printf("user %s logged in.\n", username) // $ hasTaintFlow="username"
48-
log.Println("user %s logged in.\n", username) // $ hasTaintFlow="username"
48+
log.Print("user is logged in:", username, password) // $ hasTaintFlow="username" hasTaintFlow="password"
49+
log.Printf(formatString, username, password) // $ hasTaintFlow="formatString" hasTaintFlow="username" hasTaintFlow="password"
50+
log.Println("user is logged in:", username, password) // $ hasTaintFlow="username" hasTaintFlow="password"
4951

5052
if testFlag == "true" {
51-
log.Fatal("user %s logged in.\n", username) // $ hasTaintFlow="username"
53+
log.Fatal("user is logged in:", username, password) // $ hasTaintFlow="username" hasTaintFlow="password"
5254
}
5355
if testFlag == "true" {
54-
log.Fatalf("user %s logged in.\n", username) // $ hasTaintFlow="username"
56+
log.Fatalf(formatString, username, password) // $ hasTaintFlow="formatString" hasTaintFlow="username" hasTaintFlow="password"
5557
}
5658
if testFlag == "true" {
57-
log.Fatalln("user %s logged in.\n", username) // $ hasTaintFlow="username"
59+
log.Fatalln("user is logged in:", username, password) // $ hasTaintFlow="username" hasTaintFlow="password"
5860
}
5961
if testFlag == "true" {
60-
log.Panic("user %s logged in.\n", username) // $ hasTaintFlow="username"
62+
log.Panic("user is logged in:", username, password) // $ hasTaintFlow="username" hasTaintFlow="password"
6163
}
6264
if testFlag == "true" {
63-
log.Panicf("user %s logged in.\n", username) // $ hasTaintFlow="username"
65+
log.Panicf(formatString, username, password) // $ hasTaintFlow="formatString" hasTaintFlow="username" hasTaintFlow="password"
6466
}
6567
if testFlag == "true" {
66-
log.Panicln("user %s logged in.\n", username) // $ hasTaintFlow="username"
68+
log.Panicln("user is logged in:", username, password) // $ hasTaintFlow="username" hasTaintFlow="password"
6769
}
6870

6971
logger := log.Default()
70-
logger.Print("user %s logged in.\n", username) // $ hasTaintFlow="username"
71-
logger.Printf("user %s logged in.\n", username) // $ hasTaintFlow="username"
72-
logger.Println("user %s logged in.\n", username) // $ hasTaintFlow="username"
73-
logger.Fatal("user %s logged in.\n", username) // $ hasTaintFlow="username"
74-
logger.Fatalf("user %s logged in.\n", username) // $ hasTaintFlow="username"
75-
logger.Fatalln("user %s logged in.\n", username) // $ hasTaintFlow="username"
76-
logger.Panic("user %s logged in.\n", username) // $ hasTaintFlow="username"
77-
logger.Panicf("user %s logged in.\n", username) // $ hasTaintFlow="username"
78-
logger.Panicln("user %s logged in.\n", username) // $ hasTaintFlow="username"
72+
logger.Print("user is logged in:", username, password) // $ hasTaintFlow="username" hasTaintFlow="password"
73+
logger.Printf(formatString, username, password) // $ hasTaintFlow="formatString" hasTaintFlow="username" hasTaintFlow="password"
74+
logger.Println("user is logged in:", username, password) // $ hasTaintFlow="username" hasTaintFlow="password"
75+
logger.Fatal("user is logged in:", username, password) // $ hasTaintFlow="username" hasTaintFlow="password"
76+
logger.Fatalf(formatString, username, password) // $ hasTaintFlow="formatString" hasTaintFlow="username" hasTaintFlow="password"
77+
logger.Fatalln("user is logged in:", username, password) // $ hasTaintFlow="username" hasTaintFlow="password"
78+
logger.Panic("user is logged in:", username, password) // $ hasTaintFlow="username" hasTaintFlow="password"
79+
logger.Panicf(formatString, username, password) // $ hasTaintFlow="formatString" hasTaintFlow="username" hasTaintFlow="password"
80+
logger.Panicln("user is logged in:", username, password) // $ hasTaintFlow="username" hasTaintFlow="password"
7981
}
8082
// k8s.io/klog
8183
{
@@ -421,7 +423,6 @@ func handler(req *http.Request, ctx *goproxy.ProxyCtx) {
421423
simpleLogger.Tracew("%s", username) // $ hasTaintFlow="username"
422424
simpleLogger.Debugw("%s %s", slice...) // $ hasTaintFlow="slice"
423425
}
424-
425426
}
426427

427428
type Logger interface {
@@ -514,8 +515,12 @@ func handlerGood4(req *http.Request, ctx *goproxy.ProxyCtx) {
514515
verbose.Infof("user %q logged in.\n", username)
515516
klog.Infof("user %q logged in.\n", username)
516517
klog.Errorf("user %q logged in.\n", username)
517-
klog.Fatalf("user %q logged in.\n", username)
518-
klog.Exitf("user %q logged in.\n", username)
518+
if testFlag == " true" {
519+
klog.Fatalf("user %q logged in.\n", username)
520+
}
521+
if testFlag == " true" {
522+
klog.Exitf("user %q logged in.\n", username)
523+
}
519524
}
520525
// elazarl/goproxy
521526
{
@@ -529,16 +534,24 @@ func handlerGood4(req *http.Request, ctx *goproxy.ProxyCtx) {
529534

530535
glog.Infof("user %q logged in.\n", username)
531536
glog.Errorf("user %q logged in.\n", username)
532-
glog.Fatalf("user %q logged in.\n", username)
533-
glog.Exitf("user %q logged in.\n", username)
537+
if testFlag == " true" {
538+
glog.Fatalf("user %q logged in.\n", username)
539+
}
540+
if testFlag == " true" {
541+
glog.Exitf("user %q logged in.\n", username)
542+
}
534543
}
535544
// sirupsen/logrus
536545
{
537546
logrus.Debugf("user %q logged in.\n", username)
538547
logrus.Errorf("user %q logged in.\n", username)
539-
logrus.Fatalf("user %q logged in.\n", username)
548+
if testFlag == " true" {
549+
logrus.Fatalf("user %q logged in.\n", username)
550+
}
540551
logrus.Infof("user %q logged in.\n", username)
541-
logrus.Panicf("user %q logged in.\n", username)
552+
if testFlag == " true" {
553+
logrus.Panicf("user %q logged in.\n", username)
554+
}
542555
logrus.Printf("user %q logged in.\n", username)
543556
logrus.Tracef("user %q logged in.\n", username)
544557
logrus.Warnf("user %q logged in.\n", username)
@@ -548,10 +561,14 @@ func handlerGood4(req *http.Request, ctx *goproxy.ProxyCtx) {
548561
entry := logrus.WithFields(fields)
549562
entry.Debugf("user %q logged in.\n", username)
550563
entry.Errorf("user %q logged in.\n", username)
551-
entry.Fatalf("user %q logged in.\n", username)
564+
if testFlag == " true" {
565+
entry.Fatalf("user %q logged in.\n", username)
566+
}
552567
entry.Infof("user %q logged in.\n", username)
553568
entry.Logf(0, "user %q logged in.\n", username)
554-
entry.Panicf("user %q logged in.\n", username)
569+
if testFlag == " true" {
570+
entry.Panicf("user %q logged in.\n", username)
571+
}
555572
entry.Printf("user %q logged in.\n", username)
556573
entry.Tracef("user %q logged in.\n", username)
557574
entry.Warnf("user %q logged in.\n", username)
@@ -560,10 +577,14 @@ func handlerGood4(req *http.Request, ctx *goproxy.ProxyCtx) {
560577
logger := entry.Logger
561578
logger.Debugf("user %q logged in.\n", username)
562579
logger.Errorf("user %q logged in.\n", username)
563-
logger.Fatalf("user %q logged in.\n", username)
580+
if testFlag == " true" {
581+
logger.Fatalf("user %q logged in.\n", username)
582+
}
564583
logger.Infof("user %q logged in.\n", username)
565584
logger.Logf(0, "user %q logged in.\n", username)
566-
logger.Panicf("user %q logged in.\n", username)
585+
if testFlag == " true" {
586+
logger.Panicf("user %q logged in.\n", username)
587+
}
567588
logger.Printf("user %q logged in.\n", username)
568589
logger.Tracef("user %q logged in.\n", username)
569590
logger.Warnf("user %q logged in.\n", username)
@@ -599,8 +620,12 @@ func handlerGood4(req *http.Request, ctx *goproxy.ProxyCtx) {
599620
verbose.Infof("user %#q logged in.\n", username) // $ hasTaintFlow="username"
600621
klog.Infof("user %#q logged in.\n", username) // $ hasTaintFlow="username"
601622
klog.Errorf("user %#q logged in.\n", username) // $ hasTaintFlow="username"
602-
klog.Fatalf("user %#q logged in.\n", username) // $ hasTaintFlow="username"
603-
klog.Exitf("user %#q logged in.\n", username) // $ hasTaintFlow="username"
623+
if testFlag == " true" {
624+
klog.Fatalf("user %#q logged in.\n", username) // $ hasTaintFlow="username"
625+
}
626+
if testFlag == " true" {
627+
klog.Exitf("user %#q logged in.\n", username) // $ hasTaintFlow="username"
628+
}
604629
}
605630
// elazarl/goproxy
606631
{
@@ -614,41 +639,57 @@ func handlerGood4(req *http.Request, ctx *goproxy.ProxyCtx) {
614639

615640
glog.Infof("user %#q logged in.\n", username) // $ hasTaintFlow="username"
616641
glog.Errorf("user %#q logged in.\n", username) // $ hasTaintFlow="username"
617-
glog.Fatalf("user %#q logged in.\n", username) // $ hasTaintFlow="username"
618-
glog.Exitf("user %#q logged in.\n", username) // $ hasTaintFlow="username"
642+
if testFlag == " true" {
643+
glog.Fatalf("user %#q logged in.\n", username) // $ hasTaintFlow="username"
644+
}
645+
if testFlag == " true" {
646+
glog.Exitf("user %#q logged in.\n", username) // $ hasTaintFlow="username"
647+
}
619648
}
620649
// sirupsen/logrus
621650
{
622-
logrus.Debugf("user %#q logged in.\n", username) // $ hasTaintFlow="username"
623-
logrus.Errorf("user %#q logged in.\n", username) // $ hasTaintFlow="username"
624-
logrus.Fatalf("user %#q logged in.\n", username) // $ hasTaintFlow="username"
625-
logrus.Infof("user %#q logged in.\n", username) // $ hasTaintFlow="username"
626-
logrus.Panicf("user %#q logged in.\n", username) // $ hasTaintFlow="username"
651+
logrus.Debugf("user %#q logged in.\n", username) // $ hasTaintFlow="username"
652+
logrus.Errorf("user %#q logged in.\n", username) // $ hasTaintFlow="username"
653+
if testFlag == " true" {
654+
logrus.Fatalf("user %#q logged in.\n", username) // $ hasTaintFlow="username"
655+
}
656+
logrus.Infof("user %#q logged in.\n", username) // $ hasTaintFlow="username"
657+
if testFlag == " true" {
658+
logrus.Panicf("user %#q logged in.\n", username) // $ hasTaintFlow="username"
659+
}
627660
logrus.Printf("user %#q logged in.\n", username) // $ hasTaintFlow="username"
628661
logrus.Tracef("user %#q logged in.\n", username) // $ hasTaintFlow="username"
629662
logrus.Warnf("user %#q logged in.\n", username) // $ hasTaintFlow="username"
630663
logrus.Warningf("user %#q logged in.\n", username) // $ hasTaintFlow="username"
631664

632665
fields := make(logrus.Fields)
633666
entry := logrus.WithFields(fields)
634-
entry.Debugf("user %#q logged in.\n", username) // $ hasTaintFlow="username"
635-
entry.Errorf("user %#q logged in.\n", username) // $ hasTaintFlow="username"
636-
entry.Fatalf("user %#q logged in.\n", username) // $ hasTaintFlow="username"
637-
entry.Infof("user %#q logged in.\n", username) // $ hasTaintFlow="username"
638-
entry.Logf(0, "user %#q logged in.\n", username) // $ hasTaintFlow="username"
639-
entry.Panicf("user %#q logged in.\n", username) // $ hasTaintFlow="username"
667+
entry.Debugf("user %#q logged in.\n", username) // $ hasTaintFlow="username"
668+
entry.Errorf("user %#q logged in.\n", username) // $ hasTaintFlow="username"
669+
if testFlag == " true" {
670+
entry.Fatalf("user %#q logged in.\n", username) // $ hasTaintFlow="username"
671+
}
672+
entry.Infof("user %#q logged in.\n", username) // $ hasTaintFlow="username"
673+
entry.Logf(0, "user %#q logged in.\n", username) // $ hasTaintFlow="username"
674+
if testFlag == " true" {
675+
entry.Panicf("user %#q logged in.\n", username) // $ hasTaintFlow="username"
676+
}
640677
entry.Printf("user %#q logged in.\n", username) // $ hasTaintFlow="username"
641678
entry.Tracef("user %#q logged in.\n", username) // $ hasTaintFlow="username"
642679
entry.Warnf("user %#q logged in.\n", username) // $ hasTaintFlow="username"
643680
entry.Warningf("user %#q logged in.\n", username) // $ hasTaintFlow="username"
644681

645682
logger := entry.Logger
646-
logger.Debugf("user %#q logged in.\n", username) // $ hasTaintFlow="username"
647-
logger.Errorf("user %#q logged in.\n", username) // $ hasTaintFlow="username"
648-
logger.Fatalf("user %#q logged in.\n", username) // $ hasTaintFlow="username"
649-
logger.Infof("user %#q logged in.\n", username) // $ hasTaintFlow="username"
650-
logger.Logf(0, "user %#q logged in.\n", username) // $ hasTaintFlow="username"
651-
logger.Panicf("user %#q logged in.\n", username) // $ hasTaintFlow="username"
683+
logger.Debugf("user %#q logged in.\n", username) // $ hasTaintFlow="username"
684+
logger.Errorf("user %#q logged in.\n", username) // $ hasTaintFlow="username"
685+
if testFlag == " true" {
686+
logger.Fatalf("user %#q logged in.\n", username) // $ hasTaintFlow="username"
687+
}
688+
logger.Infof("user %#q logged in.\n", username) // $ hasTaintFlow="username"
689+
logger.Logf(0, "user %#q logged in.\n", username) // $ hasTaintFlow="username"
690+
if testFlag == " true" {
691+
logger.Panicf("user %#q logged in.\n", username) // $ hasTaintFlow="username"
692+
}
652693
logger.Printf("user %#q logged in.\n", username) // $ hasTaintFlow="username"
653694
logger.Tracef("user %#q logged in.\n", username) // $ hasTaintFlow="username"
654695
logger.Warnf("user %#q logged in.\n", username) // $ hasTaintFlow="username"

0 commit comments

Comments
 (0)