Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WIP: Ubuntu needrestart LPE (CVE-2024-48990) #19676

Draft
wants to merge 6 commits into
base: master
Choose a base branch
from

Conversation

h00die
Copy link
Contributor

@h00die h00die commented Nov 22, 2024

Fixes #19675

Working exploit based on PoC, needs a lot of optimization and checks though. Putting here since it was announced 3 days ago, so some penetester may want it early.

Verification

  • Install the application
  • Start msfconsole
  • Get an initial shell
  • Do: use exploit/linux/local/ubuntu_needrestart_lpe
  • Do: set lhost <ip>
  • Do: set lport <port>
  • Do: set session <session>
  • Do: run
  • You should get a root shell.

Comment on lines 83 to 85
version = cmd_exec('cat /etc/issue | cut -d " " -f 2').strip
version = version.slice(0, 5) # take off any extra version info
return CheckCode::Safe("Ubuntu version #{version} is not vulnerable") unless fixed_versions.key? version
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why couldn't those versions of Ubuntu run a vulnerable version of needrestart?

Comment on lines 87 to 89
package = cmd_exec('dpkg -l needrestart | grep \'^ii\'')
package = package.split(' ')[2]
package = package.gsub('+', '.')
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Isn't there a mixin to check if a package is installed and get its version?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

not that i'm aware of. took a quick look and didn't see any, but seems like a good idea. I coded out an Ubuntu based one. I'll throw it up in a few days once its more tested

vprint_status("Uploading payload: #{payload_path}")
register_files_for_cleanup(payload_path)

# our c stub file does our chmod/chown/suid for the payload
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wouldn't it be better to use metasploit's options/features to prepend the setuid call to the payload, instead of having it in the stub?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it may be possible, this was a copy of the PoC with no additions.

However, I'm not sure if it would work since the c_stub is originally called by the python script itself. It fails to do the chmod etc. The python stub then waits watching for our payload to get modified.

needrestart is run by sudo/root/etc, which then runs our c_stub, changes the permissions. It may be possible to modify c_stub so that it executes the payload directly only if it detects itself running as root. That would take out some system complexity, but i may need some @zeroSteiner (or other r7) on updating the code to work in metasm (updated code coming soon).

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks like this can be refined some more, further testing will happen this week

modules/exploits/linux/local/ubuntu_needrestart_lpe.rb Outdated Show resolved Hide resolved
modules/exploits/linux/local/ubuntu_needrestart_lpe.rb Outdated Show resolved Hide resolved
@h00die h00die changed the title Ubuntu needrestart LPE (CVE-2024-48990) WIP: Ubuntu needrestart LPE (CVE-2024-48990) Nov 25, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Ubuntu needrestart LPE (CVE-2024-48990)
2 participants