From 29be8cd98d7238e254b24cbd081a1974a496d7e5 Mon Sep 17 00:00:00 2001 From: liquidsec Date: Fri, 27 Mar 2026 17:01:35 -0400 Subject: [PATCH] Use asndb verify=False, respect global ssl_verify config --- bbot/core/event/helpers.py | 6 +++--- bbot/core/helpers/asn.py | 3 ++- bbot/scanner/scanner.py | 3 ++- bbot/scanner/target.py | 6 +++--- pyproject.toml | 2 +- uv.lock | 8 ++++---- 6 files changed, 15 insertions(+), 13 deletions(-) diff --git a/bbot/core/event/helpers.py b/bbot/core/event/helpers.py index f0012ddafc..48c440f691 100644 --- a/bbot/core/event/helpers.py +++ b/bbot/core/event/helpers.py @@ -112,7 +112,7 @@ def _sanitize_and_extract_host(self, data): """ return data, None, None - async def _generate_children(self): + async def _generate_children(self, ssl_verify=False): return [] def _override_input(self, input): @@ -294,10 +294,10 @@ def _override_input(self, input): # ASNs are essentially just a superset of IP_RANGES. # This method resolves the ASN to a list of IP_RANGES using the ASN API, and then adds the cidr string as a child event seed. # These will later be automatically resolved to an IP_RANGE event seed and added to the target. - async def _generate_children(self): + async def _generate_children(self, ssl_verify=False): from asndb import ASNDB - client = ASNDB() + client = ASNDB(verify=ssl_verify) asn_data = await client.lookup_asn(str(self.data), include_subnets=True) children = [] if asn_data: diff --git a/bbot/core/helpers/asn.py b/bbot/core/helpers/asn.py index 63cc31df12..d7693bfcce 100644 --- a/bbot/core/helpers/asn.py +++ b/bbot/core/helpers/asn.py @@ -28,7 +28,8 @@ def client(self): if self._client is None: from asndb import ASNDB - self._client = ASNDB() + ssl_verify = self.parent_helper.web_config.get("ssl_verify", False) + self._client = ASNDB(verify=ssl_verify) return self._client def _normalize(self, response): diff --git a/bbot/scanner/scanner.py b/bbot/scanner/scanner.py index 488a85e781..b2883cded6 100644 --- a/bbot/scanner/scanner.py +++ b/bbot/scanner/scanner.py @@ -293,7 +293,8 @@ async def _prep(self): creates the scan's output folder, loads its modules, and calls their .setup() methods. """ # expand async seed types (e.g. ASN → IP ranges) - await self.preset.target.generate_children() + ssl_verify = self.preset.web_config.get("ssl_verify", False) + await self.preset.target.generate_children(ssl_verify=ssl_verify) # evaluate preset conditions (may abort the scan) if self.preset.conditions: diff --git a/bbot/scanner/target.py b/bbot/scanner/target.py index a91954557b..ff5c0d4548 100644 --- a/bbot/scanner/target.py +++ b/bbot/scanner/target.py @@ -415,7 +415,7 @@ def in_target(self, host): def __eq__(self, other): return self.hash == other.hash - async def generate_children(self): + async def generate_children(self, ssl_verify=False): """ Generate children for the target, for seed types that expand into other seed types. E.g. ASN targets are expanded into their constituent IP ranges. @@ -426,13 +426,13 @@ async def generate_children(self): # Expand seeds first for event_seed in list(self.seeds.event_seeds): - children = await event_seed._generate_children() + children = await event_seed._generate_children(ssl_verify=ssl_verify) for child in children: self.seeds.add(child) # Also expand blacklist event seeds (like ASN targets) for event_seed in list(self.blacklist.event_seeds): - children = await event_seed._generate_children() + children = await event_seed._generate_children(ssl_verify=ssl_verify) for child in children: self.blacklist.add(child) diff --git a/pyproject.toml b/pyproject.toml index 96ab0632f4..8f161689c3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -43,7 +43,7 @@ dependencies = [ "puremagic>=1.28,<2", "pydantic>=2.12.2,<3", "radixtarget>=4.0.1,<5", - "asndb>=1.0.0", + "asndb>=1.0.4", "orjson>=3.10.12,<4", "ansible-core>=2.17,<3", "tldextract>=5.3.0,<6", diff --git a/uv.lock b/uv.lock index 21f483ad41..dbd6201b0b 100644 --- a/uv.lock +++ b/uv.lock @@ -119,7 +119,7 @@ wheels = [ [[package]] name = "asndb" -version = "1.0.2" +version = "1.0.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cachetools" }, @@ -127,9 +127,9 @@ dependencies = [ { name = "radixtarget" }, { name = "typer" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/0d/cf/c76454e691a96881732cf868977c2b5ad6bc03356f8e33d9fe885ea417cd/asndb-1.0.2.tar.gz", hash = "sha256:28c4c86cb390742ecaee4544ec4ca553946ff3d67d7d328a8f0e1d88e94d99e8", size = 18768, upload-time = "2026-03-05T20:53:10.059Z" } +sdist = { url = "https://files.pythonhosted.org/packages/82/2b/86f8d056d24476aeb0f7e63fb971b870f7018e728d9272a05232157cae30/asndb-1.0.4.tar.gz", hash = "sha256:23989a4a09e66b76a86b1a36eea78138b4a3001b5f909bb89e110635bb1723f2", size = 18956, upload-time = "2026-03-27T20:45:56.192Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3a/1e/dc153bcbaacd7f80264aa5f06e888f4873144ac11978d7fd05fc7a848a60/asndb-1.0.2-py3-none-any.whl", hash = "sha256:2c170fbc3ad3ce1e98bc353d4801765d3a691b852ddd144306900ed273e337bf", size = 18261, upload-time = "2026-03-05T20:53:08.917Z" }, + { url = "https://files.pythonhosted.org/packages/e1/d7/a9084a90ea60919f84c39dc2302d802c9047b87373fcc2309898ca4095d9/asndb-1.0.4-py3-none-any.whl", hash = "sha256:a62e4f5872e12cbd4b146c7583f7bf2a5239e43ed20a63728295058ee3f1a3db", size = 18467, upload-time = "2026-03-27T20:45:57.022Z" }, ] [[package]] @@ -260,7 +260,7 @@ docs = [ requires-dist = [ { name = "ansible-core", specifier = ">=2.17,<3" }, { name = "ansible-runner", specifier = ">=2.3.2,<3" }, - { name = "asndb", specifier = ">=1.0.0" }, + { name = "asndb", specifier = ">=1.0.4" }, { name = "beautifulsoup4", specifier = ">=4.12.2,<5" }, { name = "cachetools", specifier = ">=5.3.2,<7.0.0" }, { name = "cloudcheck", specifier = ">=9.2.0,<10" },