ROOTPLOIT
Server: Apache
System: Linux node6122.myfcloud.com 6.14.3-x86_64-linode168 #1 SMP PREEMPT_DYNAMIC Mon Apr 21 19:47:55 EDT 2025 x86_64
User: bashacomputer (1004)
PHP: 7.4.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //lib64/nagios/plugins/check_a2_cpu_throttle.shared
#!/usr/bin/python3

import os
import subprocess
import socket

# Check if the hostname contains "vplatform" - BFENG-1670
hostname = socket.gethostname()
if "vplatform" in hostname:
  print("check not applicable this is vplatform server - OK")
  exit(0)

# allow our agents to whitelist SEL events
if os.path.isfile('/opt/hwflags/event.whitelist'):
	with open('/opt/hwflags/event.whitelist','r') as f:
		whitelist = f.read().split('\n')
else:
	whitelist = []

try:
	# Start off assumning no issues
	problem = False

	# Parse ipmitool output
	o = subprocess.check_output(['/bin/ipmitool','sel','elist'])
	s = str(o,encoding='utf-8',errors='replace')
	lines = s.split('\n')
	
	# Go through each line of output.
	for l in lines:
		f = l.split('|')
		# look only for lines which mention processor throttling
		if len(f) >= 5 and 'Processor' in f[3] and 'Throttled' in f[4]:
			eid = f[0].strip()
			if 'Asserted' in f[5] and not eid in whitelist:
				# Asserted means thottling has started. We might have a problem.
				problem = True
			elif 'Deasserted' in f[5]:
				# Deasserted means throttling has stopped. We no longer have a problem.
				problem = False

	if problem:
		# An assertion not followed by deassertion is found, CPU is probably throttled.
		print ("throttling detected!")
		exit(2)
	else:
		# No assertions in SEL or all are followed by deassertion.
		print ("no throttling detected.")
		exit(0)
except FileNotFoundError:
	# ipmitool returned a file not found error.
	print ("ipmitool binary missing.")
	exit(3)
except subprocess.CalledProcessError:
	# ipmitool returned a different error.
	print ("error running ipmitool.")
	exit(3)