Skip to content

Fix OS command injection in WinRweAccess via os.system → subprocess.run(shell=False) - #114

Open
sys-xmlcli wants to merge 1 commit into
intel:mainfrom
sys-xmlcli:PTK0009082
Open

sys-xmlcli wants to merge 1 commit into
intel:mainfrom
sys-xmlcli:PTK0009082

Conversation

@sys-xmlcli

Copy link
Copy Markdown
Contributor

No description provided.

# Built-in imports
import os
import binascii
import subprocess

def warm_reset(self):
os.system('{} /Nologo /Min /Command="O 0xCF9 0x06; RwExit"'.format(self.rw_executable))
subprocess.run([self.rw_executable, "/Nologo", "/Min", "/Command=O 0xCF9 0x06; RwExit"], shell=False)

def cold_reset(self):
os.system('{} /Nologo /Min /Command="O 0xCF9 0x0E; RwExit"'.format(self.rw_executable))
subprocess.run([self.rw_executable, "/Nologo", "/Min", "/Command=O 0xCF9 0x0E; RwExit"], shell=False)

def mem_block(self, address, size):
os.system('{} /Nologo /Min /Command="SAVE {} Memory 0x{:x} 0x{:x}; RwExit"'.format(self.rw_executable, self.temp_data_bin, address, size))
subprocess.run([self.rw_executable, "/Nologo", "/Min", "/Command=SAVE {} Memory 0x{:x} 0x{:x}; RwExit".format(self.temp_data_bin, address, size)], shell=False)

def mem_save(self, filename, address, size):
os.system('{} /Nologo /Min /Command="SAVE {} Memory 0x{:x} 0x{:x}; RwExit"'.format(self.rw_executable, filename, address, size))
subprocess.run([self.rw_executable, "/Nologo", "/Min", "/Command=SAVE {} Memory 0x{:x} 0x{:x}; RwExit".format(filename, address, size)], shell=False)
else:
cmd = "W{} 0x{:x} 0x{:x}; W32 0x{:x} 0x{:x}".format(32, address, (value & 0xFFFFFFFF), (address + 4), (value >> 32))
os.system('{} /Nologo /Min /Command="{}; RwExit"'.format(self.rw_executable, cmd))
subprocess.run([self.rw_executable, "/Nologo", "/Min", "/Command={}; RwExit".format(cmd)], shell=False)

def load_data(self, filename, address):
os.system('{} /Nologo /Min /Command="LOAD {} Memory 0x{:x}; RwExit"'.format(self.rw_executable, filename, address))
subprocess.run([self.rw_executable, "/Nologo", "/Min", "/Command=LOAD {} Memory 0x{:x}; RwExit".format(filename, address)], shell=False)
if size in (1, 2, 4):
cmd = "I{} 0x{:x}".format("" if size == 1 else 8*size, address)
os.system('{} /Nologo /Min /LogFile={} /Command="{}; RwExit"'.format(self.rw_executable, self.result_text, cmd))
subprocess.run([self.rw_executable, "/Nologo", "/Min", "/LogFile={}".format(self.result_text), "/Command={}; RwExit".format(cmd)], shell=False)
if size in (1, 2, 4):
cmd = "O{} 0x{:x} 0x{:x}".format("" if size == 1 else 8*size, address, value)
os.system('{} /Nologo /Min /Command="{}; RwExit"'.format(self.rw_executable, cmd))
subprocess.run([self.rw_executable, "/Nologo", "/Min", "/Command={}; RwExit".format(cmd)], shell=False)

def trigger_smi(self, smi_value):
os.system('{} /Nologo /Min /Command="O 0x{:x} 0x{:x}; RwExit"'.format(self.rw_executable, 0xB2, smi_value))
subprocess.run([self.rw_executable, "/Nologo", "/Min", "/Command=O 0x{:x} 0x{:x}; RwExit".format(0xB2, smi_value)], shell=False)

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants