A Splunk deployment server can push configuration and scripts to every universal forwarder it manages, which makes it one of the most powerful and least watched software deployment systems in many estates. Universal forwarders run on domain controllers, payment servers and cloud hosts, often with broad read access, and they trust whatever the deployment server (now called the agent manager in current documentation) sends them. HTTP Event Collector (HEC) tokens and the shared pass4SymmKey secrets add more machine credentials that few teams inventory. This guide covers the identity model of the Splunk data collection tier, privileged roles, tokens and keys, TLS between components, detection of tampering, and a hardening baseline with exact server.conf and deploymentclient.conf settings. It is for Splunk administrators, SOC engineers and security architects. It complements the Splunk Enterprise Security Guide, which covers detection content and ES itself.
Key takeaways
- The deployment server is a code execution channel. Anyone who can change a server class or app on it can run scripted inputs on every client, so treat it like a software deployment tool (ATT&CK T1072), not a log utility.
- Turn on deployment authentication. Since 8.1.10.1, 8.2.6.1 and 9.0.0, deployment servers and clients can mutually authenticate phone home and bundle downloads; before 9.0, bundles could be downloaded without authentication (CVE-2022-32157).
- Most TLS checks are off by default.
sslVerifyServerCert,sslVerifyServerNameandrequireClientCertall default to false inserver.conf, and the certificates shipped with the product must be replaced. - Run forwarders least privileged. On Linux 9.0 and later the forwarder can run as
splunkfwdwith onlyCAP_DAC_READ_SEARCH, which removes root from the most widely deployed Splunk component. - Tokens and keys are non-human identities. HEC tokens,
pass4SymmKeyvalues and the admin credentials on each forwarder need owners, scoping, vault storage and rotation.
How identity and access work in the Splunk collection tier
Splunk components authenticate to each other in several different ways, and each one is a separate trust decision.
| Connection | Default port | How it is authenticated | What a stolen credential allows |
|---|---|---|---|
| Forwarder to indexer (Splunk-to-Splunk) | Configured receiving port (9997 by convention) | TLS certificates when configured; otherwise any host that can reach the port can send | Inject or flood data into indexes |
| Deployment client to deployment server (phone home and bundle download) | 8089 (splunkd management) | pass4SymmKey in the [deployment] stanza plus requireAuthentication in restmap.conf, with non-default certificates | Impersonate the server to clients, or download bundles that may hold passwords and certificates |
| HEC client to HEC | Set in Global Settings, HTTP Port Number (8088 is typical) | Bearer token in the Authorization: Splunk <token> header | Write events to every index the token allows |
| Admin or app to splunkd REST | 8089 | User credentials or authentication tokens; acceptFrom controls source networks | Full administration, including disabling inputs |
| Cluster, search head cluster and licensing peers | 8089 and replication ports | pass4SymmKey in [clustering], [shclustering] or [general] | Join or disrupt the cluster |
The local admin account on each universal forwarder is another identity. Current releases have no default password (an admin must be created at install), but estates built from old images or scripted installs often reuse one password across thousands of forwarders.
Admin roles and privileged access
- Deployment server administrators: whoever can edit
serverclass.confor drop an app intodeployment-appscontrols code on every client. Limit this to a small group, require MFA through SAML or your identity provider for Splunk Web, and route changes through version control and review. See the Service Account Security Guide for the account model. - Host administrators on the deployment server: root or local administrator on that host is equivalent to Splunk admin on it. Put the host in your highest administrative tier, alongside other software deployment and configuration management servers.
- Forwarder local admin: use a unique, vaulted credential per forwarder or per build, and set
allowRemoteLogin(defaultrequireSetPassword, marked deprecated) so remote splunkd logins are refused where they are not needed. - Forwarder operating system account: on Linux run as
splunkfwdwithAmbientCapabilities=CAP_DAC_READ_SEARCHandNoNewPrivileges=yes, set throughsplunk enable boot-start -systemd-managed 1 -user <user> -group <group>. On Windows choose a low-privilege or virtual account where the inputs allow it, rather than Local System by habit. - Splunk Cloud Platform: Splunk Cloud does not use customer deployment servers in the cloud tier (the SVD-2022-0607 advisory states it was not affected), but customers still run deployment servers on premises to manage their forwarders, so the controls here still apply.
Integrations, API tokens and service accounts
| Credential | Where it lives | Hardening |
|---|---|---|
| HEC token | HEC configuration under $SPLUNK_HOME/etc/apps/splunk_httpinput/local and in every sending application | One token per source; Select Allowed Indexes limited to the source's own index; Enable SSL in Global Settings; disable a token per source in the Actions column when retired; indexer acknowledgment where loss matters |
pass4SymmKey | server.conf stanzas [deployment], [clustering], [shclustering], [general] | Different keys per service type, at least 12 characters (pass4SymmKey_minLength default), generated randomly; Splunk encrypts it at restart; keep a vaulted record because recovery is difficult |
| TLS private keys and certificates | Each instance's certificate paths | Replace the shipped certificates, issue from your PKI, track expiry; see the Machine Identity, PKI and Certificate Lifecycle Guide |
| Credentials inside deployment apps | App bundles pushed to clients (for example scripted inputs that call APIs) | Keep secrets out of bundles; bundles were downloadable without authentication before 9.0, and any client can read what it receives |
| Forwarder admin password | Each forwarder's local authentication store | Unique per host or build, vaulted, rotated; never baked into a golden image |
Store all of these in a secrets manager with an owner and rotation date. See the Secrets Management Guide. When rotating a HEC token, create the new token, move the client, confirm data flows, then disable the old one.
Deployment server and client controls
- Upgrade first. Deployment servers and all managed forwarders must be at 9.0 or later (or 8.1.10.1 and 8.2.6.1 on older lines) before mutual authentication can be enabled. Once enabled, older clients stop being managed.
- Install non-default certificates on the deployment server and clients. The authentication procedure requires that they are not the certificates shipped with Splunk.
- Set
pass4SymmKeyin the[deployment]stanza ofserver.confon the server and every client. - Require authentication in
$SPLUNK_HOME/etc/system/local/restmap.confon the deployment server:requireAuthentication = truewithauthKeyStanzapointing at the stanza that holds the key, under[broker:broker]and[streams:agent]. This can only be done by editing the file, and needs a restart, not a reload. - Pin where content can land. In
deploymentclient.confsetserverRepositoryLocationPolicy = rejectAlwaysandserverEndpointPolicy = rejectAlwaysso the server cannot redirect installs or downloads to arbitrary paths or endpoints. Keep changes inetc/system/local, neverdefault. - Verify the client trusts the right server. Set
sslVerifyServerCert = trueandsslVerifyServerName = truein the client's[sslConfig];sslVerifyServerNameonly works whensslVerifyServerCertis on. - Test in a pilot server class. Move a small group of forwarders first and watch client
splunkd.logfor errors such as "Received message that did not originate from deployment server, ignoring", which shows the client is rejecting unauthenticated messages. - Rollback: remove the
restmap.confsettings and restart the deployment server to return to unauthenticated operation while you fix clients. Keep the previous configuration in version control.
Do not use the deployment server for indexer cluster peers (use the cluster manager and configuration bundles) or search head cluster members (use the deployer). Hierarchical deployment servers (reloadDSOnAppInstall) are discouraged in the documentation.
Logging and detection
Splunk records its own activity in internal indexes (commonly _internal for component logs such as splunkd.log and _audit for user and configuration actions). Forward and protect these like any other security log, and alert on the events below.
| Signal | Source | Why it matters | ATT&CK |
|---|---|---|---|
| New or changed app or server class on the deployment server | File integrity monitoring on deployment-apps and serverclass.conf; _audit | Possible code push to all clients | T1072 Software Deployment Tools |
| Forwarder stops sending, or an input is disabled | Forwarder heartbeat in _internal; missing data alerts | Attackers silence collection before acting | T1685 Disable or Modify Tools |
| HEC token created, enabled or given new indexes; HEC traffic to an unexpected index | _audit, HEC metrics in _internal | Token misuse or event injection | T1528 Steal Application Access Token |
Read of server.conf, deployment bundles or HEC configuration by unexpected processes | EDR or auditd on Splunk hosts | Harvesting keys and tokens | T1552.001 Credentials In Files |
| Management port 8089 connections from outside admin networks | Network flow logs; acceptFrom denies | REST abuse or exploitation | T1190 Exploit Public-Facing Application |
| Client rejects messages not from the deployment server | Client splunkd.log | Spoofing attempt or misconfiguration | T1199 Trusted Relationship |
Because the SIEM watches itself here, also send these alerts, or at least deployment server file integrity events, to a second destination that a Splunk administrator cannot silence. See the SIEM Guide.
Testing the controls
- Unauthenticated bundle download: from a host that is not an enrolled client, confirm that requests to the deployment server for a bundle are refused once authentication is on.
- Rogue server: point a test forwarder at a deployment server with a certificate from another issuer and confirm the handshake fails with verification enabled.
- Token scope: send a test event with each HEC token to an index outside its allowed list and confirm it is rejected.
- Silence alert: stop a pilot forwarder and time how long it takes for the missing data alert to reach the SOC queue.
Run these after every Splunk upgrade, because upgrades can reset local settings or change defaults.
Metrics:
- Share of forwarders at a version that supports deployment authentication, and share actually enrolled with it enabled.
- Share of Linux forwarders running as a non-root user.
- Number of HEC tokens with a named owner and a single allowed index, as a share of all tokens.
- Age of the oldest
pass4SymmKeyand forwarder admin credential. - Mean time to detect a silent critical forwarder.
- Changes to deployment apps that went through review, as a share of all changes (target: 100 percent).
Hardening baseline
- Patch: track Splunk security advisories; CVE-2026-20253, a missing authentication flaw in a Splunk Enterprise PostgreSQL sidecar service endpoint, was added to the CISA KEV catalogue on 18 June 2026. Put Splunk Enterprise hosts in the emergency patch path.
- Management port: set
acceptFromin[httpServer](default*) to admin and Splunk networks only. Do not setdisableDefaultPort = trueon components that need management; the documentation advises against it. KeepenableSplunkdSSL = true(the default). - TLS: replace shipped certificates on all instances; turn on
sslVerifyServerCertandsslVerifyServerName; restrictsslVersionsto TLS 1.2 or later; on indexers receiving forwarder data, require client certificates so only enrolled forwarders can send. - HEC: enable SSL, one token per source, single allowed index, no tokens with access to security result indexes.
- Forwarder identity: least-privileged service account, unique admin credential, no unused inputs or apps.
- Deployment server: mutual authentication on, client policies set to
rejectAlways, changes through code review, host in the top administrative tier. - Audit: forward
_auditand deployment server integrity events to a protected destination.
Small versus large estates: a small estate with a few dozen forwarders can manage configuration with existing tools such as Ansible, Puppet or Salt (the documentation lists these as alternatives) and avoid running a deployment server at all. Large estates gain from the deployment server's scale but must invest in authentication, change control and monitoring to match.
Framework mapping
| Control area | NIST SP 800-53 Rev. 5 | NIST CSF 2.0 | CIS Controls v8.1 |
|---|---|---|---|
| Deployment server change control | CM-3, CM-6 | PR.PS-01 | Control 4 |
| Tokens, keys and forwarder credentials | IA-5, AC-2 | PR.AA-05 | Control 5, Control 6 |
| Least privilege for forwarders and admins | AC-6 | PR.AA-05 | Control 6 |
| TLS between components | SC-8, SC-12 | PR.DS | Control 3 |
| Protecting the logging pipeline | AU-9 | PR.PS-04, DE.CM-09 | Control 8 |
| Patching Splunk | SI-2 | PR.PS-02 | Control 7 |
Common misconfigurations
- Deployment server reachable from everywhere, unauthenticated. Before 9.0 any host could download forwarder bundles (CVE-2022-32157, CVSS 7.5), and bundles often carried passwords and certificates.
- Default certificates and no verification. With
sslVerifyServerCert = false, a forwarder will talk to anything presenting a certificate, so traffic interception or a rogue deployment server goes unnoticed. - Forwarders running as root or Local System everywhere. A malicious scripted input then runs with full privileges on every host.
- One
pass4SymmKeyfor every service and every environment. A key taken from a test instance opens production clustering and deployment. - Secrets in deployment apps. API keys for scripted inputs copied to thousands of hosts, readable by anyone with local access.
- No alert when collection stops. Disabling a forwarder is quieter than deleting logs and often goes unnoticed for weeks. See the EDR Tampering and BYOVD Response Playbook for a parallel response pattern.
Practitioner checklist
- Inventory deployment servers, forwarders by version and run-as account, HEC tokens and
pass4SymmKeyvalues. - Upgrade the deployment server and forwarders to versions that support deployment authentication, then enable it.
- Set
serverRepositoryLocationPolicyandserverEndpointPolicytorejectAlwayson clients. - Replace shipped certificates and turn on server certificate and name verification.
- Restrict port 8089 with
acceptFromand firewalls to admin and Splunk networks. - Run Linux forwarders as
splunkfwdwith onlyCAP_DAC_READ_SEARCH. - Issue one HEC token per source with a single allowed index, SSL on and an owner.
- Use distinct, random
pass4SymmKeyvalues per service type and environment, stored in a vault. - Put deployment apps under version control and review, with file integrity alerts on the server.
- Alert on silent forwarders, token changes and deployment changes to a destination Splunk admins cannot silence.
Standards and references
- Splunk: Configure communication and bundle download authentication for agents and agent management
- Splunk: Secure Splunk Enterprise services with pass4SymmKey
- Splunk: Manage a Linux least-privileged user (Universal Forwarder Manual)
- Splunk: deploymentclient.conf specification
- Splunk: server.conf specification
- Splunk: Set up and use HTTP Event Collector
- Splunk: SVD-2022-0607 Deployment server forwarder bundle download (CVE-2022-32157)
- MITRE ATT&CK: Software Deployment Tools
Related NHI Mgmt Group resources: Splunk Enterprise Security Guide · SIEM Guide · Secrets Management Guide · Service Account Security Guide