CVE-2023-41319
Fides open-source platform allows arbitrary code execution via webserver API in versions 2.11.0 to 2.19.0 with CONNECTOR_TEMPLATE_REGISTER authorization scope and enabled allow_custom_connector_functions
- CVSS 7.2
- CWE-94 Improper Control of Generation of Code ('Code Injection')
- Authentication, Authorization, and Session Management
- Local
Fides is an open-source privacy engineering platform for managing the fulfillment of data privacy requests in a runtime environment, and the enforcement of privacy regulations in code. The Fides webserver API allows custom integrations to be uploaded as a ZIP file. This ZIP file must contain YAML files, but Fides can be configured to also accept the inclusion of custom Python code in it. The custom code is executed in a restricted, sandboxed environment, but the sandbox can be bypassed to execute any arbitrary code. The vulnerability allows the execution of arbitrary code on the target system within the context of the webserver python process owner on the webserver container, which by default is `root`, and leverage that access to attack underlying infrastructure and integrated systems. This vulnerability affects Fides versions `2.11.0` through `2.19.0`. Exploitation is limited to API clients with the `CONNECTOR_TEMPLATE_REGISTER` authorization scope. In the Fides Admin UI this scope is restricted to highly privileged users, specifically root users and users with the owner role. Exploitation is only possible if the security configuration parameter `allow_custom_connector_functions` is enabled by the user deploying the Fides webserver container, either in `fides.toml` or by setting the env var `FIDES__SECURITY__ALLOW_CUSTOM_CONNECTOR_FUNCTIONS=True`. By default this configuration parameter is disabled. The vulnerability has been patched in Fides version `2.19.0`. Users are advised to upgrade to this version or later to secure their systems against this threat. Users unable to upgrade should ensure that `allow_custom_connector_functions` in `fides.toml` and the `FIDES__SECURITY__ALLOW_CUSTOM_CONNECTOR_FUNCTIONS` are both either unset or explicit set to `False`.
- CVSS base score
- 7.2
- Published
- 2023-09-06
- OWASP
- A05 Security Misconfiguration
- Orthogonal defect classification
- Function
- Code defect classification
- Incorrect Functionality
- Category
- Authentication, Authorization, and Session Management
- Subcategory
- Privilege Escalation
- Accessibility scope
- Local
- Impact
- Arbitrary Code Execution
- Fixed by upgrading
- Yes
Solution
Upgrade to Fides version 2.19.0 or later.
Vulnerable code sample
import os
import zipfile
import importlib.util
def process_uploaded_zip(zip_file_path):
with zipfile.ZipFile(zip_file_path, 'r') as zip_file:
zip_file.extractall('/tmp/custom_connectors')
for file_name in os.listdir('/tmp/custom_connectors'):
if file_name.endswith('.py'):
file_path = os.path.join('/tmp/custom_connectors', file_name)
spec = importlib.util.spec_from_file_location("custom_connector", file_path)
custom_connector = importlib.util.module_from_spec(spec)
spec.loader.exec_module(custom_connector)
def upload_connector(zip_file):
process_uploaded_zip(zip_file)Patched code sample
import os
import zipfile
import importlib.util
import re
ALLOWED_EXTENSIONS = {'.py'}
def check_filename(filename):
return not re.search(r'(\.\.|\/)', filename)
def process_uploaded_zip(zip_file_path):
extraction_dir = '/tmp/custom_connectors'
os.makedirs(extraction_dir, exist_ok=True)
with zipfile.ZipFile(zip_file_path, 'r') as zip_file:
for file_name in zip_file.namelist():
if not check_filename(file_name):
raise ValueError(f"Unsafe file path detected: {file_name}")
if any(not file_name.endswith(ext) for ext in ALLOWED_EXTENSIONS):
continue
zip_file.extract(file_name, extraction_dir)
for file_name in os.listdir(extraction_dir):
if file_name.endswith('.py'):
file_path = os.path.join(extraction_dir, file_name)
spec = importlib.util.spec_from_file_location("custom_connector", file_path)
custom_connector = importlib.util.module_from_spec(spec)
spec.loader.exec_module(custom_connector)
def upload_connector(zip_file):
process_uploaded_zip(zip_file)Cite this entry
@misc{vaitp:cve202341319,
title = {{Fides open-source platform allows arbitrary code execution via webserver API in versions 2.11.0 to 2.19.0 with CONNECTOR_TEMPLATE_REGISTER authorization scope and enabled allow_custom_connector_functions}},
author = {Bogaerts, Fr\'ed\'eric and Ivaki, Naghmeh and Fonseca, Jos\'e},
year = {2023},
note = {VAITP Python Vulnerability Dataset, entry CVE-2023-41319},
howpublished = {\url{https://netpack.pt/vaitp/vulnerability/CVE-2023-41319/}}
}
Introducing the "VAITP dataset": a specialized repository of Python vulnerabilities and patches, meticulously compiled for the use of the security research community. As Python's prominence grows, understanding and addressing potential security vulnerabilities become crucial. Crafted by and for the cybersecurity community, this dataset offers a valuable resource for researchers, analysts, and developers to analyze and mitigate the security risks associated with Python. Through the comprehensive exploration of vulnerabilities and corresponding patches, the VAITP dataset fosters a safer and more resilient Python ecosystem, encouraging collaborative advancements in programming security.
The supreme art of war is to subdue the enemy without fighting.
Sun Tzu – “The Art of War”
:: Shaping the future through research and ingenuity ::
