Exposure of Access Control List Files to an Unauthorized Control Sphere
Description
Exposure of Access Control List Files to an Unauthorized Control Sphere is a vulnerability where a product stores access control list (ACL) files in a directory or other container that is accessible to actors outside of the intended control sphere. ACL files define permissions and access rights for system resources, users, and applications. When these files are exposed to unauthorized parties, attackers can gain detailed knowledge of security configurations, identify weaknesses in access control policies, discover trusted systems and accounts, and potentially modify the ACLs to grant themselves unauthorized access.
Risk
Exposed ACL files provide attackers with a roadmap of the security architecture. Knowledge of which users have administrative access helps identify high-value targets for compromise. Understanding permission structures reveals paths to privilege escalation. Identification of trusted IP addresses or systems enables attackers to spoof trusted sources or prioritize attacking those systems. If ACL files are not only readable but writable, attackers can directly modify permissions to grant themselves access. Even read-only exposure enables reconnaissance that dramatically reduces the effort needed for successful attacks.
Solution
Store ACL files in directories with restricted access permissions that limit read and write access to authorized system administrators only. Use operating system-level file permissions to protect ACL files. Avoid storing ACL files in web-accessible directories. Implement monitoring and alerting for access to ACL files. Use version control for ACL changes with proper access controls. Consider encrypting ACL files at rest. Regularly audit file permissions on security-sensitive configuration files. Implement the principle of least privilege for processes that need to read ACL configurations.
Common Consequences
| Impact | Details |
|---|---|
| Confidentiality | Scope: Confidentiality Read Application Data - Attackers can read ACL files to understand permission structures, identify administrative accounts, and discover trusted systems. |
| Access Control | Scope: Access Control Bypass Protection Mechanism - Knowledge of access control configurations enables attackers to identify and exploit weaknesses in security policies or bypass controls by targeting trusted systems. |
Example Code
Vulnerable Configuration
# Vulnerable: ACL files in world-readable directory
$ ls -la /var/www/html/config/
-rw-r--r-- 1 www-data www-data 1024 Jan 15 10:00 acl.conf
-rw-r--r-- 1 www-data www-data 2048 Jan 15 10:00 permissions.xml
-rw-r--r-- 1 www-data www-data 512 Jan 15 10:00 .htaccess
-rw-r--r-- 1 www-data www-data 4096 Jan 15 10:00 users_roles.json
# All these files are world-readable and web-accessible!
# Attacker can download via:
# http://example.com/config/acl.conf
# http://example.com/config/permissions.xml
<!-- Vulnerable: ACL file exposed in webroot -->
<!-- /var/www/html/config/permissions.xml -->
<?xml version="1.0"?>
<access-control>
<roles>
<role name="admin" level="100">
<users>
<user>john.admin</user>
<user>mary.sysadmin</user>
<user>backup_service</user> <!-- Service account exposed -->
</users>
<permissions>
<permission>read</permission>
<permission>write</permission>
<permission>delete</permission>
<permission>admin</permission>
</permissions>
</role>
<role name="api_access" level="50">
<trusted_ips>
<ip>10.0.0.100</ip> <!-- Internal server IPs exposed -->
<ip>10.0.0.101</ip>
<ip>192.168.1.50</ip>
</trusted_ips>
</role>
</roles>
</access-control>
// Vulnerable: User roles file accessible via web
// /var/www/html/data/users_roles.json
{
"admin_users": [
{"username": "admin", "password_hint": "company name + year"},
{"username": "superuser", "email": "[email protected]"},
{"username": "backup_admin", "service_account": true}
],
"api_keys": {
"internal_api": "allowed_from: 10.0.0.0/8",
"partner_api": "allowed_from: 203.0.113.0/24"
},
"bypass_rules": [
{"path": "/admin/*", "allowed_ips": ["10.0.0.1", "192.168.1.1"]},
{"path": "/api/internal/*", "no_auth_required": true}
]
}
# Vulnerable: Apache configuration exposing .htaccess
<VirtualHost *:80>
DocumentRoot /var/www/html
# Vulnerable: No restriction on reading .htaccess files
# or other ACL configuration files
<Directory /var/www/html>
AllowOverride All
# .htaccess files are readable
</Directory>
</VirtualHost>
<?php
// Vulnerable: PHP application with exposed ACL path
class VulnerableAuthManager {
// Vulnerable: ACL file in webroot
private $aclFile = '/var/www/html/config/acl.php';
// Vulnerable: File readable as PHP source
public function loadAcl() {
include($this->aclFile);
return $acl;
}
}
// /var/www/html/config/acl.php - accessible directly!
$acl = [
'admin' => ['admin_user', 'superuser', 'root'],
'moderator' => ['mod1', 'mod2'],
'api_whitelist' => ['10.0.0.50', '10.0.0.51'],
'bypass_auth' => ['/api/health', '/api/status'],
];
Fixed Configuration
# Fixed: ACL files with restricted permissions
$ ls -la /etc/myapp/
drwx------ 2 root root 4096 Jan 15 10:00 .
-rw------- 1 root root 1024 Jan 15 10:00 acl.conf
-rw------- 1 root root 2048 Jan 15 10:00 permissions.xml
-rw------- 1 root root 4096 Jan 15 10:00 users_roles.json
# Fixed: Files only readable by root
# Application runs with capability to read specific files
# Fixed: Setting proper permissions
#!/bin/bash
# Fixed: Create secure directory for ACL files
mkdir -p /etc/myapp/acl
chown root:myapp-group /etc/myapp/acl
chmod 750 /etc/myapp/acl
# Fixed: Secure individual files
chmod 640 /etc/myapp/acl/*.conf
chown root:myapp-group /etc/myapp/acl/*.conf
# Fixed: SELinux context (if applicable)
semanage fcontext -a -t etc_t '/etc/myapp/acl(/.*)?'
restorecon -R /etc/myapp/acl
# Fixed: Apache blocking access to configuration files
<VirtualHost *:80>
DocumentRoot /var/www/html
# Fixed: Block all config directories
<DirectoryMatch "^.*/config">
Require all denied
</DirectoryMatch>
# Fixed: Block specific file patterns
<FilesMatch "\.(conf|xml|json|yml|yaml|ini)$">
Require all denied
</FilesMatch>
# Fixed: Block .htaccess from being downloaded
<Files ".htaccess">
Require all denied
</Files>
# Fixed: Block ACL-related files
<FilesMatch "(acl|permissions|roles|access)">
Require all denied
</FilesMatch>
</VirtualHost>
# Fixed: Nginx blocking configuration files
server {
listen 80;
root /var/www/html;
# Fixed: Block config directories
location ~ /config/ {
deny all;
return 404;
}
# Fixed: Block configuration file extensions
location ~* \.(conf|xml|json|yml|yaml|ini)$ {
deny all;
return 404;
}
# Fixed: Block ACL-related files
location ~* (acl|permissions|roles|access)\.(php|conf|json|xml)$ {
deny all;
return 404;
}
}
<?php
// Fixed: PHP application with secure ACL storage
class SecureAuthManager {
// Fixed: ACL file outside webroot
private $aclFile = '/etc/myapp/acl/permissions.php';
public function loadAcl() {
// Fixed: Verify file permissions
$perms = fileperms($this->aclFile);
if (($perms & 0x0004) !== 0) { // World-readable
throw new SecurityException("ACL file has insecure permissions");
}
// Fixed: Load from secure location
if (!file_exists($this->aclFile)) {
throw new ConfigException("ACL file not found");
}
return include($this->aclFile);
}
// Fixed: Encrypt sensitive parts of ACL
public function loadEncryptedAcl() {
$encrypted = file_get_contents('/etc/myapp/acl/permissions.enc');
$key = $this->getDecryptionKey(); // From secure key management
return json_decode($this->decrypt($encrypted, $key), true);
}
}
# Fixed: Python application with secure ACL handling
import os
import stat
import json
class SecureACLManager:
# Fixed: ACL outside web directories
ACL_PATH = '/etc/myapp/acl/permissions.json'
def __init__(self):
self._verify_acl_permissions()
def _verify_acl_permissions(self):
"""Verify ACL file has secure permissions."""
if not os.path.exists(self.ACL_PATH):
raise FileNotFoundError("ACL file not found")
# Fixed: Check file permissions
mode = os.stat(self.ACL_PATH).st_mode
# World-readable?
if mode & stat.S_IROTH:
raise SecurityError("ACL file is world-readable")
# World-writable?
if mode & stat.S_IWOTH:
raise SecurityError("ACL file is world-writable")
# Group-writable?
if mode & stat.S_IWGRP:
raise SecurityError("ACL file is group-writable")
def load_acl(self):
"""Load ACL from secure location."""
self._verify_acl_permissions()
with open(self.ACL_PATH, 'r') as f:
acl = json.load(f)
# Fixed: Log ACL access for audit
self._audit_log("ACL loaded by process " + str(os.getpid()))
return acl
def _audit_log(self, message):
"""Log security-relevant events."""
import syslog
syslog.syslog(syslog.LOG_AUTH | syslog.LOG_INFO, message)
# Fixed: Deployment script ensuring proper permissions
def secure_acl_deployment():
import subprocess
# Fixed: Set ownership
subprocess.run(['chown', 'root:myapp', '/etc/myapp/acl'])
subprocess.run(['chown', 'root:myapp', '/etc/myapp/acl/permissions.json'])
# Fixed: Set permissions - owner read/write, group read only
subprocess.run(['chmod', '750', '/etc/myapp/acl'])
subprocess.run(['chmod', '640', '/etc/myapp/acl/permissions.json'])
# Fixed: Kubernetes ConfigMap with RBAC protection
apiVersion: v1
kind: ConfigMap
metadata:
name: app-acl
namespace: secure-app
data:
# Fixed: Non-sensitive ACL structure only
# Sensitive values in Secrets with restricted access
roles.yaml: |
roles:
- name: admin
level: 100
- name: user
level: 10
---
apiVersion: v1
kind: Secret
metadata:
name: app-acl-sensitive
namespace: secure-app
type: Opaque
data:
# Fixed: Sensitive ACL data encrypted in Secret
admin_users: YWRtaW5fdXNlcnNfZW5jcnlwdGVk
---
# Fixed: RBAC to restrict Secret access
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: acl-reader
namespace: secure-app
rules:
- apiGroups: [""]
resources: ["secrets"]
resourceNames: ["app-acl-sensitive"]
verbs: ["get"]
CVE Examples
No specific CVEs are listed in the MITRE database for this CWE. However, the vulnerability pattern is common in:
- Web application misconfigurations
- Cloud storage permission issues
- Server hardening failures
References
- MITRE Corporation. "CWE-529: Exposure of Access Control List Files to an Unauthorized Control Sphere." https://cwe.mitre.org/data/definitions/529.html
- OWASP. "Security Misconfiguration."
- CIS Benchmarks. "File System Permissions."