From aba71817de75f8b370c151571b1796a50280b2b0 Mon Sep 17 00:00:00 2001 From: Jared Ondricek Date: Tue, 29 Sep 2026 16:46:06 -0500 Subject: [PATCH 1/4] fix(stixhelpers): handle missing URL in external references and log a warning --- modules/util/stixhelpers.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/modules/util/stixhelpers.py b/modules/util/stixhelpers.py index befaf8a234a..b7c77fe588a 100644 --- a/modules/util/stixhelpers.py +++ b/modules/util/stixhelpers.py @@ -583,7 +583,13 @@ def download_stix_file(url, filepath): def get_url_from_stix(stix_object, is_subtechnique=False): """Parse the website url from a stix object.""" if stix_object.get("external_references"): - url = stix_object["external_references"][0]["url"] + first_external_reference = stix_object["external_references"][0] + url = first_external_reference.get("url") + if not url: + attack_id = buildhelpers.get_attack_id(stix_object) + stix_id = stix_object["id"] + logger.warning(f"[{stix_id}] [{attack_id}] has no URL in its first external reference") + return None split_url = url.split("/") splitfrom = -3 if is_subtechnique else -2 link = "/".join(split_url[splitfrom:]) From 71d36feee7acbb16f82f3d63cdd86bcf7bde40f9 Mon Sep 17 00:00:00 2001 From: Jared Ondricek Date: Wed, 30 Sep 2026 10:17:33 -0500 Subject: [PATCH 2/4] feat(stixtests): add handling for invalid STIX bundles and log errors --- modules/stixtests/stixtests.py | 8 +++++++- modules/stixtests/stixtests_config.py | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/modules/stixtests/stixtests.py b/modules/stixtests/stixtests.py index 824148a4a7d..849319e3e1b 100644 --- a/modules/stixtests/stixtests.py +++ b/modules/stixtests/stixtests.py @@ -16,6 +16,7 @@ def run_tests(): """Run tests""" error_list = [] tests = 0 + invalid_stix_domains = [] logger.info("Removing old reports") reports = [stixtests_config.linkbyids_report_filename] @@ -39,11 +40,14 @@ def run_tests(): stix_filename = util.stixhelpers.get_stix_file_path(domain["name"]) logger.info(f"Validating STIX for domain: {domain['name']}") + tests += 1 results = stix2validator.validate_file(fn=str(stix_filename), options=options) if results.is_valid: logger.info(f"File {stix_filename} is valid") else: logger.error(f"File {stix_filename} is invalid:") + error_list.append(stixtests_config.INVALID_STIX_BUNDLE) + invalid_stix_domains.append(domain["name"]) stix2validator.print_results(results) @@ -77,6 +81,8 @@ def run_tests(): error_count=broken_linkbyids_count, error_type="Broken LinkByIds", ) + if invalid_stix_domains: + logger.error(f"STIX validation failed for: {', '.join(invalid_stix_domains)}") if not site_config.args.override_exit_status: handle_exit(error_list) @@ -193,5 +199,5 @@ def handle_exit(exit_codes): # Exit on failure if any of these exit codes are found # Regarding the link checker, only exit on failure if a problem # is found on an internal link - if stixtests_config.BROKEN_LINKBYID in exit_codes: + if stixtests_config.BROKEN_LINKBYID in exit_codes or stixtests_config.INVALID_STIX_BUNDLE in exit_codes: exit(stixtests_config.FAILURE) diff --git a/modules/stixtests/stixtests_config.py b/modules/stixtests/stixtests_config.py index 5634f11a566..36cf011739b 100644 --- a/modules/stixtests/stixtests_config.py +++ b/modules/stixtests/stixtests_config.py @@ -15,6 +15,7 @@ FAILURE = 1 WARNING = 2 BROKEN_LINKBYID = -14 +INVALID_STIX_BUNDLE = -15 # Used to reset text color RESET = "\033[0m" # mode 0 = reset From f4b2a6effa310d6f24a18ace69da2abff1c282e0 Mon Sep 17 00:00:00 2001 From: Jared Ondricek Date: Wed, 30 Sep 2026 10:17:55 -0500 Subject: [PATCH 3/4] fix: update mitreattack-python version to 6.2.1 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 773a84c0813..9a001f9e3c7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,7 +4,7 @@ bleach==6.3.0 colorama==0.4.6 future==1.0.0 loguru==0.7.3 -mitreattack-python==6.2.0 +mitreattack-python==6.2.1 pelican==4.12.0 pelican-sitemap==1.2.2 python-dotenv==1.2.2 From 1c444a1ad7f806445698c3a6c2afc307ed895936 Mon Sep 17 00:00:00 2001 From: Jared Ondricek Date: Thu, 1 Oct 2026 13:18:24 -0500 Subject: [PATCH 4/4] feat: update ATT&CKcon 7.0 details and add virtual registration link --- data/attackcon.json | 3 ++- modules/resources/templates/attackcon-overview.html | 12 ++++++++++++ website-banner.production | 2 +- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/data/attackcon.json b/data/attackcon.json index e09d4a7e4e5..e3543e348a9 100644 --- a/data/attackcon.json +++ b/data/attackcon.json @@ -2,12 +2,13 @@ { "date": "October 2026", "title": "ATT&CKcon 7.0", - "description": "ATT&CKcon 7.0 is scheduled for October 27-28, 2026. Join the MITRE ATT&CK community in McLean or virtually for the next annual conference led by the MITRE ATT&CK team. More details will be shared on the event site as they become available.", + "description": "ATT&CKcon 7.0 is scheduled for October 27-28, 2026. Join the MITRE ATT&CK community in McLean or virtually for the next annual conference led by the MITRE ATT&CK team. Virtual registration is now open.", "banner_img": "/theme/images/attackcon/attackcon-7.0/attackcon7-logo.png", "banner_img_max_width": "32rem", "event_dates": "October 27-28, 2026", "event_location": "McLean, VA and virtual", "event_link": "https://na.eventscloud.com/mitreattack7/", + "virtual_registration_link": "https://mitre.brandlive.com/MITRE-ATTACKcon-7-0", "cfp_link": "https://www.openconf.org/ATTACKcon2026/openconf.php", "cfp_deadline_et": "2026-07-02T20:00:00-04:00" }, diff --git a/modules/resources/templates/attackcon-overview.html b/modules/resources/templates/attackcon-overview.html index bd5e5339e98..101afd06d4b 100644 --- a/modules/resources/templates/attackcon-overview.html +++ b/modules/resources/templates/attackcon-overview.html @@ -55,6 +55,18 @@

{{ con.title }} Event Details

{% endif %} + {% if "virtual_registration_link" in con %} + + + + {% endif %} {% if con.show_cfp %}