Skip to content

Commit f598f1e

Browse files
committed
Create new firewall lists storage object
1 parent d8ef8a2 commit f598f1e

2 files changed

Lines changed: 59 additions & 41 deletions

File tree

aikido_zen/background_process/service_config.py

Lines changed: 0 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44

55
from typing import Pattern
66

7-
import regex as re
8-
97
from aikido_zen.helpers.ip_matcher import IPMatcher
108
from aikido_zen.helpers.match_endpoints import match_endpoints
119

@@ -26,9 +24,6 @@ def __init__(
2624
self.update(
2725
endpoints, last_updated_at, blocked_uids, bypassed_ips, received_any_stats
2826
)
29-
self.blocked_ips = []
30-
self.allowed_ips = []
31-
self.blocked_user_agent_regex: Pattern = None
3227

3328
def update(
3429
self,
@@ -81,39 +76,3 @@ def set_bypassed_ips(self, bypassed_ips):
8176
def is_bypassed_ip(self, ip):
8277
"""Checks if the IP is on the bypass list"""
8378
return self.bypassed_ips.has(ip)
84-
85-
def set_blocked_ips(self, blocked_ip_entries):
86-
self.blocked_ips = list(map(parse_ip_entry, blocked_ip_entries))
87-
88-
def set_allowed_ips(self, allowed_ip_entries):
89-
self.allowed_ips = list(map(parse_ip_entry, allowed_ip_entries))
90-
91-
def is_blocked_ip(self, ip):
92-
for entry in self.blocked_ips:
93-
if entry["iplist"].has(ip):
94-
return entry["description"]
95-
return False
96-
97-
def set_blocked_user_agents(self, blocked_user_agents: str):
98-
if not blocked_user_agents:
99-
self.blocked_user_agent_regex = None
100-
return
101-
self.blocked_user_agent_regex = re.compile(blocked_user_agents, re.IGNORECASE)
102-
103-
def is_user_agent_blocked(self, ua: str):
104-
if not ua:
105-
return False
106-
if not self.blocked_user_agent_regex:
107-
return False
108-
return self.blocked_user_agent_regex.search(ua)
109-
110-
111-
def parse_ip_entry(entry):
112-
"""
113-
Converts ip entry: {"source": "example", "description": "Example description", "ips": []}
114-
"""
115-
return {
116-
"source": entry["source"],
117-
"description": entry["description"],
118-
"iplist": IPMatcher(entry["ips"]),
119-
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
from aikido_zen.helpers.ip_matcher import IPMatcher
2+
import regex as re
3+
4+
from aikido_zen.vulnerabilities.ssrf.is_private_ip import is_private_ip
5+
6+
7+
class FirewallLists:
8+
def __init__(self):
9+
self.blocked_ips = []
10+
self.allowed_ips = []
11+
self.blocked_user_agent_regex = None
12+
13+
def set_blocked_ips(self, blocked_ip_entries):
14+
self.blocked_ips = list(map(parse_ip_entry, blocked_ip_entries))
15+
16+
def is_blocked_ip(self, ip):
17+
for entry in self.blocked_ips:
18+
if entry["iplist"].has(ip):
19+
return entry["description"]
20+
return False
21+
22+
def set_allowed_ips(self, allowed_ip_entries):
23+
self.allowed_ips = list(map(parse_ip_entry, allowed_ip_entries))
24+
25+
def is_allowed_ip(self, ip):
26+
# We don't want to block local ip addresses
27+
if is_private_ip(ip):
28+
return True
29+
30+
for entry in self.allowed_ips:
31+
if entry["iplist"].has(ip):
32+
# The ip only needs to match with one of the lists, not all.
33+
return True
34+
35+
return False
36+
37+
def set_blocked_user_agents(self, blocked_user_agents: str):
38+
if not blocked_user_agents:
39+
self.blocked_user_agent_regex = None
40+
return
41+
self.blocked_user_agent_regex = re.compile(blocked_user_agents, re.IGNORECASE)
42+
43+
def is_user_agent_blocked(self, ua: str):
44+
if not ua:
45+
return False
46+
if not self.blocked_user_agent_regex:
47+
return False
48+
return self.blocked_user_agent_regex.search(ua)
49+
50+
51+
def parse_ip_entry(entry):
52+
"""
53+
Converts ip entry: {"source": "example", "description": "Example description", "ips": []}
54+
"""
55+
return {
56+
"source": entry["source"],
57+
"description": entry["description"],
58+
"iplist": IPMatcher(entry["ips"]),
59+
}

0 commit comments

Comments
 (0)