Skip to content

Commit a5ecf93

Browse files
p4p3r0xDC0DE
andauthored
Update argo workflow injection rule (#3681) (#3690)
* Update argo workflow injection rule * add dashes Co-authored-by: Pieter De Cremer (Semgrep) <[email protected]>
2 parents e48387f + 54c51a3 commit a5ecf93

File tree

2 files changed

+79
-41
lines changed

2 files changed

+79
-41
lines changed

yaml/argo/security/argo-workflow-parameter-command-injection.test.yaml

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,25 @@ spec:
3939
# ruleid: argo-workflow-parameter-command-injection
4040
source: |
4141
print("{{inputs.parameters.message}}")
42+
- script:
43+
name: ''
44+
image: node:9.1-alpine
45+
command:
46+
- node
47+
resources: {}
48+
# ruleid: argo-workflow-parameter-command-injection
49+
source: |
50+
var rand = Math.floor(Math.random() * 100);
51+
console.log("{{inputs.parameters.message}}");
52+
- script:
53+
name: ''
54+
image: ruby:3.0
55+
command:
56+
- ruby
57+
resources: {}
58+
# ruleid: argo-workflow-parameter-command-injection
59+
source: |
60+
puts "{{inputs.parameters.message}}"
4261
- name: print-message-args
4362
inputs:
4463
parameters:
@@ -48,6 +67,41 @@ spec:
4867
command: [sh, -c]
4968
# ruleid: argo-workflow-parameter-command-injection
5069
args: ["echo result was: {{inputs.parameters.message}}"]
70+
- name: print-message-python
71+
inputs:
72+
parameters:
73+
- name: message
74+
outputs: {}
75+
metadata: {}
76+
containerSet:
77+
containers:
78+
- name: main
79+
image: python:alpine3.6
80+
command:
81+
- python
82+
- '-c'
83+
# ruleid: argo-workflow-parameter-command-injection
84+
args: ["echo result was: {{inputs.parameters.message}}"]
85+
resources: {}
86+
- name: print-message-python2
87+
inputs:
88+
parameters:
89+
- name: message
90+
outputs: {}
91+
metadata: {}
92+
containerSet:
93+
containers:
94+
- name: main
95+
image: python:alpine3.6
96+
command:
97+
- python
98+
- '-c'
99+
args:
100+
# ruleid: argo-workflow-parameter-command-injection
101+
- |
102+
print("hi")
103+
print("{{inputs.parameters.message}}")
104+
resources: {}
51105
- name: print-message-secure
52106
inputs:
53107
parameters:
@@ -73,3 +127,4 @@ spec:
73127
command: [sh, -c]
74128
# ok: argo-workflow-parameter-command-injection
75129
args: ["echo result was: $MESSAGE"]
130+

yaml/argo/security/argo-workflow-parameter-command-injection.yaml

Lines changed: 24 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -29,64 +29,47 @@ rules:
2929
metavariable: $VERSION
3030
regex: (argoproj.io.*)
3131
- pattern-either:
32-
- patterns:
33-
- pattern-inside: |
34-
command:
35-
...
36-
- python
37-
...
38-
...
39-
source:
40-
$SCRIPT
41-
- focus-metavariable: $SCRIPT
42-
- metavariable-pattern:
43-
metavariable: $SCRIPT
44-
language: python
45-
patterns:
46-
- pattern: |
47-
$FUNC(..., $PARAM, ...)
48-
- metavariable-pattern:
49-
metavariable: $PARAM
50-
pattern-either:
51-
- pattern-regex: (.*{{.*inputs.parameters.*}}.*)
52-
- pattern-regex: (.*{{.*workflow.parameters.*}}.*)
5332
- patterns:
5433
- pattern-inside: |
5534
command:
5635
...
5736
- $LANG
5837
...
5938
...
60-
source:
39+
source:
6140
$SCRIPT
6241
- metavariable-regex:
6342
metavariable: $LANG
64-
regex: (bash|sh)
65-
- focus-metavariable: $SCRIPT
43+
regex: .*(sh|bash|ksh|csh|tcsh|zsh|python|python3|node|perl|ruby|php|lua|awk|sed|powershell|fish|dash|R|grooby|scala|clj|elixir|coffee|dart|haskell|ocaml).*
6644
- metavariable-pattern:
6745
metavariable: $SCRIPT
68-
language: bash
69-
patterns:
70-
- pattern: |
71-
$CMD ... $PARAM ...
72-
- metavariable-pattern:
73-
metavariable: $PARAM
74-
pattern-either:
75-
- pattern-regex: (.*{{.*inputs.parameters.*}}.*)
76-
- pattern-regex: (.*{{.*workflow.parameters.*}}.*)
46+
pattern-either:
47+
- pattern-regex: (.*{{.*inputs.parameters.*}}.*)
48+
- pattern-regex: (.*{{.*workflow.parameters.*}}.*)
49+
- focus-metavariable: $SCRIPT
7750
- patterns:
78-
- pattern-inside: |
79-
container:
80-
...
81-
command: $LANG
82-
...
83-
args: $PARAM
51+
- pattern-either:
52+
- pattern-inside: |
53+
container:
54+
...
55+
command: $LANG
56+
...
57+
args: $PARAM
58+
- pattern-inside: |
59+
containerSet:
60+
...
61+
containers:
62+
- ...
63+
command: $LANG
64+
...
65+
args: $PARAM
8466
- metavariable-regex:
8567
metavariable: $LANG
86-
regex: .*(sh|bash|ksh|csh|tcsh|zsh).*
68+
regex: .*(sh|bash|ksh|csh|tcsh|zsh|python|python3|node|perl|ruby|php|lua|awk|sed|powershell|fish|dash|R|grooby|scala|clj|elixir|coffee|dart|haskell|ocaml).*
8769
- metavariable-pattern:
8870
metavariable: $PARAM
89-
pattern-either:
71+
pattern-either:
9072
- pattern-regex: (.*{{.*inputs.parameters.*}}.*)
9173
- pattern-regex: (.*{{.*workflow.parameters.*}}.*)
9274
- focus-metavariable: $PARAM
75+

0 commit comments

Comments
 (0)