Summary
PlaybookRunRequest.extravars is stored verbatim in ansible_jobs.extravars (JSONB) and returned in AnsibleJobResponse to any authenticated viewer. A caller can pass ansible_ssh_pass as an extravar and have it persisted and leaked through the jobs list/detail API.
Root cause
fleet_platform/models/ansible_job.py:20 — extravars = mapped_column(JSONB)
fleet_platform/api/routes/ansible.py:1268-1280 — returned verbatim in response
Definition of Ready (DoR)
Acceptance criteria
Tests required
Definition of Done (DoD)
Summary
PlaybookRunRequest.extravarsis stored verbatim inansible_jobs.extravars(JSONB) and returned inAnsibleJobResponseto any authenticatedviewer. A caller can passansible_ssh_passas an extravar and have it persisted and leaked through the jobs list/detail API.Root cause
fleet_platform/models/ansible_job.py:20—extravars = mapped_column(JSONB)fleet_platform/api/routes/ansible.py:1268-1280— returned verbatim in responseDefinition of Ready (DoR)
fix/security-extravars-scrubansible_ssh_pass,ansible_become_password,password,secret,tokenAcceptance criteria
_scrub()pattern fromaudit.pyAnsibleJobResponse.extravarsnever contains a sensitive key valueTests required
test_extravars_sensitive_keys_scrubbed_before_storageansible_ssh_passextravar; GET job response does not contain itDefinition of Done (DoD)
Closes #N