Executive Summary
CVE-2026-33519 is a critical incorrect authorization vulnerability (CVSS 9.8) in Esri Portal for ArcGIS versions 11.4, 11.5, and 12.0 that allows privileged users to generate developer credentials with permissions far exceeding their intended scope. Once an overprivileged credential is created — intentionally or not — any bearer of that credential can perform administrative-level operations, exposing spatial datasets, organizational configurations, and user data to full compromise. Esri released emergency patches in April 2026, and all Portal for ArcGIS operators should treat remediation as an immediate priority.
1. What Is This Vulnerability?
Portal for ArcGIS is Esri's enterprise spatial data management platform, widely deployed across federal and state government agencies, utilities, defense contractors, and large enterprises. It exposes a REST API through which internal applications and third-party integrations authenticate using developer credentials — OAuth 2.0-style API keys scoped to a defined set of privileges.
The vulnerability lies in a flaw in the authorization logic that validates the privilege scope requested when a developer credential is created. In affected versions (11.4, 11.5, and 12.0), the server failed to enforce that the requested scope could not exceed the creating user's own privilege ceiling — a classic privilege assignment without scope validation bug. As a result:
- A highly privileged administrator creating developer credentials could unintentionally (or intentionally) issue tokens with admin-level access regardless of the intended scope.
- Those over-scoped tokens, once issued, were accepted by Portal's authorization layer as fully valid.
- Any entity holding such a token — whether a legitimate integration or a compromised third party — could invoke administrative API endpoints, including user management, data layer configuration, and security policy changes.
Attack Vector
The attack chain requires an authenticated user with sufficient privilege to create developer credentials (typically a Portal Administrator or a delegated credential issuer). Once an over-scoped credential is issued, exploitation requires only:
- Possession of the credential (stolen, leaked in code, or deliberately issued).
- Any API call targeting an administrative endpoint using that credential as a bearer token.
POST /portal/sharing/rest/content/users/admin/addItem HTTP/1.1
Host: portal.example.org
Authorization: Bearer <over-scoped-developer-token>
Content-Type: application/x-www-form-urlencoded
title=Backdoor+Config&type=Feature+Service&...
Because the token validates as authentic and the server did not enforce scope boundaries at consumption time, the request succeeds — even if the credential was nominally created for a read-only mapping integration.
Real-World Impact
Esri noted in its April 2026 security bulletin that Portal for ArcGIS 11.5 and 12.0 patch releases will reset all developer credentials previously created on those versions, due to the systemic risk of over-scoped credentials already in the wild. This reset-on-patch behavior is a strong signal that Esri believed a wide population of existing credentials may already have excessive permissions, whether operators were aware of it or not.
Organizations with Portal deployments connected to public-facing portals, map services consumed by external contractors, or automated integrations using long-lived API keys face elevated risk — particularly where those credentials were generated between the introduction of the flaw and the April 2026 patches.
2. Who Is Affected?
| Product | Affected Versions | Deployment Models |
|---|---|---|
| Esri Portal for ArcGIS | 11.4, 11.5, 12.0 | Windows, Linux, Kubernetes |
| ArcGIS Enterprise (self-hosted) | Any including above Portal versions | All |
| ArcGIS Online | Not directly affected (cloud-managed) | N/A |
You are at risk if:
- You are running Portal for ArcGIS 11.4, 11.5, or 12.0 in a self-hosted or Kubernetes deployment.
- Developer credentials (API keys) were created on these versions before the April 2026 patches were applied.
- Long-lived API keys are embedded in application configs, CI/CD pipelines, or third-party integrations.
ArcGIS Online (Esri's SaaS offering) is managed by Esri and is not listed as affected.
3. How to Detect It (Testing)
Manual Testing Steps
Step 1: Identify existing developer credentials
Log in to the Portal Admin UI → Organization → Security → API Keys / Developer Credentials. Export or note the list of all active credentials and their purported scopes.
Step 2: Run the Esri Credential Check Tool Esri released a dedicated scanning utility as part of the April 2026 bulletin. This tool connects to the Portal database and reports credentials whose actual permissions exceed their defined scope.
# Download from Esri My Esri portal (requires valid maintenance agreement)
./arcgis-credential-check --portal-url https://portal.example.org \
--admin-user <username> --admin-pass <password> \
--output-format json > credential_audit.json
Any credential flagged with "scope_mismatch": true in the output should be treated as over-scoped and immediately revoked.
Step 3: Test a known-scoped credential against admin endpoints
Take a developer credential nominally scoped to views:read or similar and attempt to call a write-capable admin endpoint:
curl -X POST "https://portal.example.org/portal/sharing/rest/portals/self/update" \
-H "Authorization: Bearer <read-scoped-credential>" \
-d "f=json&access=public"
On patched systems this should return HTTP 403. On unpatched systems, if the credential is over-scoped, this may return HTTP 200 — confirming the vulnerability is present.
Automated Scanning
Tool: Tenable Nessus / Nessus Professional
Tenable has released a plugin for CVE-2026-33519 as of April 22, 2026.
- Plugin ID: Search for
CVE-2026-33519in Nessus plugin manager. - Configure scan against the Portal for ArcGIS host on port 443.
- Expected output: Plugin flags unpatched Portal versions and reports
"Incorrect Authorization: developer credential scope not enforced".
Tool: Nuclei (ProjectDiscovery)
id: CVE-2026-33519
info:
name: Esri ArcGIS Portal Incorrect Authorization
severity: critical
tags: cve,arcgis,esri,auth,privesc
requests:
- method: GET
path:
- "{{BaseURL}}/portal/sharing/rest/info?f=json"
matchers-condition: and
matchers:
- type: word
words:
- '"currentVersion"'
- '"Portal for ArcGIS"'
- type: word
words:
- '"11.4"'
- '"11.5"'
- '"12.0"'
condition: or
This template identifies vulnerable Portal versions accessible over HTTP/S.
Code Review Checklist
When reviewing ArcGIS integration code for credential hygiene:
- Verify all developer credentials are generated with the minimum scope required (principle of least privilege).
- Confirm no hardcoded API keys exist in source code repositories (
git grep -r 'Authorization: Bearer'). - Check that long-lived credentials have expiration policies set.
- Ensure credential rotation policies are documented and enforced for all automated integrations.
- Validate that credential creation events are logged in Portal's audit log.
4. How to Fix It (Remediation)
Step-by-Step Remediation
-
Apply Esri's April 2026 patches immediately.
- Portal for ArcGIS 11.5 and 12.0: Apply Patch B (released 2026-04-16). This patch resets all previously created developer credentials as a safety measure.
- Portal for ArcGIS 11.4: Apply the standalone patch released 2026-04-20.
- Patches are available via My Esri under the Downloads section for each product version.
-
Run the Esri Credential Check Tool (pre-patch, if possible). Before patching, run the tool to inventory all credentials and flag over-scoped ones. This gives you a remediation list for notifying downstream application teams.
-
Execute a global token reset (post-patch). The 11.5/12.0 patches do this automatically. For 11.4, administrators should manually navigate to
Portal Admin → Security → Reset All Tokensto force re-authentication by all integrations. Communicate this to all teams with automated integrations before executing. -
Re-issue credentials with verified, minimal scopes. After reset, work with each integration owner to re-issue developer credentials with explicitly scoped permissions. Do not reuse old credential values.
-
Review audit logs for suspicious activity. Examine Portal's audit log for any calls to administrative endpoints made with developer credentials in the 30–90 days preceding the patch. Anomalous activity (e.g., a mapping API key accessing
portals/self/updateor user management endpoints) should trigger an incident investigation. -
Redeploy and validate. Restart Portal services after patching to ensure the new authorization logic is active.
Configuration Hardening
After patching, apply these configuration changes:
# Portal Admin Settings — Recommended Hardening
# 1. Set short expiration on developer credentials (e.g., 90 days max)
Developer Credential Max Lifetime: 90 days
# 2. Restrict which Portal roles can create developer credentials
Credential Creation: Administrator only (remove from Publisher role)
# 3. Enable Multi-Factor Authentication for all admin accounts
MFA: Required for Administrative roles
# 4. Enable IP allowlisting for administrative API endpoints
Admin API IP Restriction: Internal subnets only (e.g., 10.0.0.0/8)
5. How to Test the Fix (Validation)
Regression Test Scenarios
- Scenario A: Attempt to create a developer credential scoped above the creating user's own privilege level. Expected: Portal returns a 403 error and does not issue the token.
- Scenario B: Attempt to use a pre-patch developer credential (if preserved for testing purposes) against an admin endpoint on the patched system. Expected: 403 Forbidden.
- Scenario C: Verify that legitimate integrations using re-issued, properly scoped credentials continue to function as expected (mapping services, feature layer queries, etc.).
Security Test Cases
Test Case 1: Privilege Escalation via Developer Credential — Should Fail Post-Patch
- Precondition: Portal for ArcGIS patched to the April 2026 security release; developer credential issued with
item:readscope. - Steps:
- Obtain bearer token for the
item:readcredential. - POST to
/portal/sharing/rest/portals/self/updatewith admin-level payload.
- Obtain bearer token for the
- Expected Result: HTTP 403 —
{"error": {"code": 403, "message": "Insufficient privileges"}}
Test Case 2: Credential Scope Enforcement at Issuance — Should Fail Post-Patch
- Precondition: Logged in as a Publisher-role user (non-admin).
- Steps:
- Attempt to create a developer credential requesting
admin:fullscope via the REST API.
- Attempt to create a developer credential requesting
- Expected Result: HTTP 400 or 403 — server rejects scope exceeding the creating user's permissions.
Test Case 3: Credential Audit Tool Produces Clean Report
- Precondition: All credentials re-issued post-patch.
- Steps:
- Run the Esri Credential Check Tool.
- Expected Result: Zero credentials flagged with
scope_mismatch: true.
Automated Tests
import requests
PORTAL_URL = "https://portal.example.org"
READ_ONLY_TOKEN = "<re-issued-read-only-developer-credential>"
def test_admin_endpoint_blocked_for_read_credential():
"""Verify that read-scoped credentials cannot invoke admin write operations."""
response = requests.post(
f"{PORTAL_URL}/portal/sharing/rest/portals/self/update",
headers={"Authorization": f"Bearer {READ_ONLY_TOKEN}"},
data={"f": "json", "access": "public"},
verify=True,
timeout=10
)
assert response.status_code == 403, (
f"FAIL: Expected 403, got {response.status_code}. "
"Admin endpoint accessible with read-only credential — patch may not be applied."
)
print("PASS: Admin endpoint correctly blocked for read-only credential.")
if __name__ == "__main__":
test_admin_endpoint_blocked_for_read_credential()
6. Prevention & Hardening
Best Practices
-
Enforce least-privilege credential scoping at creation time. Establish organizational policy that developer credentials must be scoped to only the specific operations required by the consuming integration. Review and document the scope of all credentials in a credential registry.
-
Implement credential rotation policies. No developer credential should be valid indefinitely. Enforce 90-day maximum lifetimes for all API keys, and build automated rotation into CI/CD pipelines where possible.
-
Treat API credentials as secrets. Store credentials in a secrets manager (HashiCorp Vault, AWS Secrets Manager, Azure Key Vault) rather than in environment variables, config files, or source code. Scan code repositories regularly with tools like
truffleHog,gitleaks, ordetect-secrets. -
Audit developer credential creation events. Configure Portal's audit log to alert on any creation of a developer credential, particularly those requesting elevated scopes, and ship those logs to your SIEM.
-
Segment administrative API access. Place ArcGIS Portal's administrative REST endpoints (
/portal/sharing/rest/portals/,/portal/portaladmin/) behind a WAF rule or network-level control that permits access only from trusted internal subnets.
Monitoring & Detection
Configure alerts for the following behaviors in your SIEM or Portal audit log:
# SIEM Alert: Developer Credential Used on Admin Endpoint
QUERY: portal_audit_log
WHERE endpoint CONTAINS "/portals/self/update"
OR endpoint CONTAINS "/security/users"
OR endpoint CONTAINS "/machines"
AND auth_type = "developer_credential"
ALERT: HIGH — Potential privilege escalation via ArcGIS developer credential
# SIEM Alert: New Developer Credential Created with Broad Scope
QUERY: portal_audit_log
WHERE event_type = "credential_created"
AND scope CONTAINS "admin" OR scope CONTAINS "full"
ALERT: MEDIUM — Verify scope is intentional and approved
Set up Tenable.sc or Qualys continuous monitoring with the CVE-2026-33519 detection plugin enabled so any newly deployed or restored Portal instance that hasn't been patched is flagged immediately.
References
- CVE Record: CVE-2026-33519 — NVD
- Esri Official Advisory: April 2026 ArcGIS Security Bulletin
- Patch Download: My Esri Downloads Portal
- Technical Analysis: CVE-2026-33519: CVSS 9.8 CRITICAL — Sherlock Forensics
- Zero Trust Risk Analysis: ArcGIS 9.8 Severity Flaw: Zero Trust Time Bomb — Hexnode
- Tenable CVE Coverage: Tenable CVE-2026-33519
- AttackerKB Assessment: CVE-2026-33519 — AttackerKB
- CISA Known Exploited Vulnerabilities Catalog: CISA KEV