Skip to content

Commit 24e0582

Browse files
semgrep-dev-pr-bot[bot]aj-formassemblyinkz
authored
New Published Rules - formassembly.wp-ssrf-audit (#3574)
* add formassembly/wp-ssrf-audit.yaml * add formassembly/wp-ssrf-audit.php * update wp-ssrf-audit test * move wp-ssrf-audit rule to php directory * update wp-ssrf-audit rule * update wp-ssrf-audit rule --------- Co-authored-by: AJ Dumanhug <[email protected]> Co-authored-by: Vasilii Ermilov <[email protected]>
1 parent dac1275 commit 24e0582

File tree

2 files changed

+106
-0
lines changed

2 files changed

+106
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
<?php
2+
3+
$url = $_GET['url'];
4+
// ruleid: wp-ssrf-audit
5+
$response = wp_remote_get($url);
6+
7+
$url = $_GET['url'];
8+
// ruleid: wp-ssrf-audit
9+
$response = wp_safe_remote_get($url);
10+
11+
$url = $_GET['url'];
12+
// ruleid: wp-ssrf-audit
13+
$response = wp_safe_remote_request($url);
14+
15+
$url = $_GET['url'];
16+
// ruleid: wp-ssrf-audit
17+
$response = wp_safe_remote_head($url);
18+
19+
$url = $_GET['url'];
20+
// ruleid: wp-ssrf-audit
21+
$response = wp_oembed_get($url);
22+
23+
$url = $_GET['url'];
24+
// ruleid: wp-ssrf-audit
25+
$response = vip_safe_wp_remote_get($url);
26+
27+
$url = $_GET['url'];
28+
// ruleid: wp-ssrf-audit
29+
$response = wp_safe_remote_post($url);
30+
31+
// ruleid: wp-ssrf-audit
32+
$response = wp_remote_get($_POST['link']);
33+
34+
// ruleid: wp-ssrf-audit
35+
$response = wp_safe_remote_post($_POST['link']);
36+
37+
// ruleid: wp-ssrf-audit
38+
$response = wp_remote_get($_REQUEST['target']);
39+
40+
// ruleid: wp-ssrf-audit
41+
$response = wp_safe_remote_request($_REQUEST['target']);
42+
43+
$url = get_option('external_api_url');
44+
// ruleid: wp-ssrf-audit
45+
$response = wp_remote_get($url);
46+
47+
$url = get_user_meta(get_current_user_id(), 'custom_api', true);
48+
// ruleid: wp-ssrf-audit
49+
$response = wp_remote_get($url);
50+
51+
$url = get_query_var('redirect_url');
52+
// ruleid: wp-ssrf-audit
53+
$response = wp_remote_get($url);
54+
55+
// ok: wp-ssrf-audit
56+
$response = wp_remote_get('https://example.com/api/data');
57+
58+
?>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
rules:
2+
- id: wp-ssrf-audit
3+
languages:
4+
- php
5+
severity: WARNING
6+
message: Detected usage of vulnerable functions with user input, which could lead
7+
to SSRF vulnerabilities.
8+
mode: taint
9+
pattern-sources:
10+
- patterns:
11+
- pattern-either:
12+
- pattern: $_GET[...]
13+
- pattern: $_POST[...]
14+
- pattern: $_REQUEST[...]
15+
- pattern: get_option(...)
16+
- pattern: get_user_meta(...)
17+
- pattern: get_query_var(...)
18+
pattern-sinks:
19+
- patterns:
20+
- focus-metavariable: $URL
21+
- pattern-either:
22+
- pattern: wp_remote_get($URL, ...)
23+
- pattern: wp_safe_remote_get($URL, ...)
24+
- pattern: wp_safe_remote_request($URL, ...)
25+
- pattern: wp_safe_remote_head($URL, ...)
26+
- pattern: wp_oembed_get($URL, ...)
27+
- pattern: vip_safe_wp_remote_get($URL, ...)
28+
- pattern: wp_safe_remote_post($URL, ...)
29+
paths:
30+
include:
31+
- wp-content/plugins/**/*.php
32+
metadata:
33+
cwe: 'CWE-918: Server-Side Request Forgery (SSRF)'
34+
owasp: A10:2021 - Server-Side Request Forgery (SSRF)
35+
category: security
36+
confidence: MEDIUM
37+
likelihood: MEDIUM
38+
impact: HIGH
39+
subcategory:
40+
- audit
41+
technology:
42+
- Wordpress Plugins
43+
references:
44+
- https://developer.wordpress.org/reference/functions/wp_safe_remote_get/
45+
- https://developer.wordpress.org/reference/functions/wp_remote_get/
46+
- https://patchstack.com/articles/exploring-the-unpatched-wordpress-ssrf/
47+
vulnerability_class:
48+
- Server-Side Request Forgery (SSRF)

0 commit comments

Comments
 (0)