A while ago I posted about how sudo can be easily backdoored by dropping a fake
sudo script into the user's PATH:
Another attack vector for sudo is monitoring the process list for invocations of
Charles Proxy is a great mac application for debugging web services and
inspecting SSL traffic for any application on your machine.
In order to inspect the SSL traffic it needs to configure the system to use a
proxy so that it can capture the packets and use its custom root CA to decode
4 May 2018 07:38 | apple
Somebody started a petition asking Apple to recall the 2016 (and presumably
2017 since they're basically the same) macbook pros and fit them with a
keyboard "that works":
Another Hashicorp bug that I've been sitting on since late last year. This one
was exploitable only during the vagrant update process, or even if the user
typed "vagrant plugin update" and there was no pending update.
It was possible for a rogue process on the system to subvert the upgrade process
in a way the user was unlikely to notice in order to steal root privileges.
Another exploit for the now deprecated vagrant-vmware-fusion plugin. This one
only works if VMware Fusion is not installed which is an unlikely scenario.
However if this should occur then it's an easy root escalation so users should
This issue was reported to Hashicorp on 16/11/17. At first they claimed it was
low priority because it required local access, despite being a straight-to-root
escalation. Then they conceded that this wasn't reasonable and said it was high
priority and that they would address it.
It has taken until this week to get their fixes out, involving an entire rewrite
I have released three cryptocurrency mining projects:
- Fanotaur: independently monitors Nvidia card temperatures and regulates fan
speeds to keep them at a preset temperature.
- Minotaur: derives calibrated hashrates and power limits from your devices for
Last year I found a couple more privilege escalation vectors in Arq Backup
for Mac version 5.10. Both have now been fixed in the latest release.
The first is relatively simple - the arq_updater binary (which runs as root)
takes a path argument for the url to retrieve an Arq update from in the format
Arq.zip. We can simply specify an arbitrary path - eg file:///tmp/blah/Arq.zip -
It occurred to me recently that a lot of people probably use screen or tmux in
ways that leave an easy path to privilege escalation open. For example if you
start a screen session as your local user and then escalate to root inside the
screen session. As soon as you do that, anyone with access to the non-root
account can simply resume the screen session and immediately be root.
Recently I was working on a security issue in some other software that has yet
to be disclosed which created a rather interesting condition. As a non-root
user I was able to write to any file on the system that was not SIP-protected
but the resulting file would not be root-owned, even if it previously was.
This presented an interesting challenge for privilege escalation - how would you
I recently blogged about the prevalence of escalation hijack vulnerabilities
amongst macOS applications. One example of this is the latest version of Murus
firewall. By design it requires the user to authenticate every time in order to
obtain the access it needs to modify the firewall settings.
If a local attacker or malware is running as an admin user (ie has write access
VirtualBox is a virtualisation application written by Oracle that is quite popular
presumably because its free. I'm not a fan myself - if my mac locks up
completely or kernel panics it's usually because I've loaded the vbox kernel
extensions less than 10 minutes ago. I use VMware Fusion instead (which is fairly
expensive but IMO worth the money) and have a ritual whereby if I've had to load
the vbox kernel extensions for work-related reasons I will reboot the machine
With all the hype today about the blank-password root bug in High Sierra I
thought I'd write a quick post about escalation hihacking on macOS and how
common it is for software to be vulnerable to this.
Consider the case of malware gaining execution on a mac. This is pretty bad to
begin with but it's all the more worse if the malware obtains root access. Even
As well as the other bugs affecting Arq <= 5.9.6 there is also another issue
with the suid-root restorer binaries in Arq for Mac. There are three of them
and they are used to execute restores of backed up files from the various
After reversing the inter-app protocol I discovered that the path to the
Arq Backup from Haystack Software is a great application for backing up macs and
windows machines. Unfortunately versions of Arq for mac before 5.9.7 are
vulnerable to a local root privilege escalation exploit.
The updater binary has a "setpermissions" function which sets the suid bit and
root ownership on itself but it suffers from a race condition that allows you to
Another day, another root privesc bug in this plugin. Not quite so serious this
time - this one is only exploitable if the user has the plugin installed but
VMware Fusion *not* installed. This is a fairly unlikely scenario but it's a
straight to root privesc with no user interaction so isn't the kind of thing
that should be shipping with any software.
I recently blogged about how the installation process of version 5.0.0 of this
plugin could be hihacked by a local attacker or malware in order to escalate
privileges to root. Hashicorp pushed some mitigations for this issue fairly
quickly but unfortunately 5.0.1 is still exploitable with a slightly different
Sera is a free app for mac and iOS that lets you unlock your mac automatically
when your iphone is within a configured proximity.
Unfortunately to facilitate this it stores the users login password in their
home directory at:
After three CVEs and multiple exploits disclosed to Hashicorp they have finally
upped their game with this plugin. Now the previously vulnerable non-root-owned
ruby code that get executed as root by the sudo helper is no more and the sudo
helper itself is one static Go binary with tightly-controlled parameters that
can't (as far as I can tell) be exploited on its own.
24 Oct 2017 12:27 | macOS
Recently I had a recurring problem where I would see mdworker running at high
CPU every 5 minutes or so for no apparent reason. Internet searches reveal loads
of people with the same problem and lots of witchcrafty ways to try to resolve
it that often don't work.
This is how I fixed it. The problem seems to occur because *something* is
I've just discovered something totally batshit about sudo on macOS.
Spot the difference..
I've published several root privilege escalation bugs this year in various Mac
applications. I decided to see how difficult it would be to escalate privileges
on a machine without actually using an exploit. Having access to a local
account with sudo rights gives us an enormous attack surface for escalation.
Many of the dotfiles, which are nearly always user-writable for obvious reasons,
I have previously disclosed a couple of bugs in Hashicorp's
vagrant-vmware-fusion plugin for vagrant.
Unfortunately the 4.0.23 release which was supposed to fix the previous bug I
reported didn't address the issue, so Hashicorp quickly put out another release
- 4.0.24 - after that (but didn't update the public changelog on github).
InsomniaX by Andrew James - http://semaja2.net - is really handy if you want to
leave your macbook running with the lid closed.
Unfortunately back in June of this year a security vulnerability in the loader
binary was disclosed that allows the loading of any arbitrary kernel extension
as a non-root user.
During recent months I have published two CVEs documenting root privilege
escalation vulnerabilities in the Hashicorp vagrant-vmware-fusion plugin.
Version 4.0.24 is now released which addresses those bugs, but it still
depends on an suid root binary being present in order for vagrant to
communicate with VMWare.
A couple of weeks ago I disclosed a local root privesc in Hashicorp's
The initial patch they released was 4.0.21 which unfortunately contained a bug
I'm a big fan of Hashicorp but this is an awful bug to have in software of their
Their vagrant plugin for vmware fusion uses a product called Ruby Encoder to
protect their proprietary ruby code. It does this by turning the ruby code into
bytecode and executing it directly.
26 May 2017 08:10 | macOS
The new macbook pros are divisive in many ways, not least of which is the
reportedly less than stellar battery life compared to the previous generation.
I bought the escape version which has innately better battery life than the
touchbar version, but opted for the i7. My strategy in the past has always been
to max the spec as much as I can afford so the machine will last a long time but
this time around there isn't a huge difference in performance between the i5 and
I blogged about Cylance a couple of times earlier this year after testing their
endpoint security product CylancePROTECT on MacOS. I ended up deleting both
blog posts shortly after posting them because I was concerned about
inaccuracies in the original post and wanted to give Cylance a chance to
respond to the issues I raised.
sudolikeaboss is a neat little program that acts as a command-line interface to
1Password Pro, effectively giving you a way to use 1password with the terminal.
This is useful but it does come with a security tradeoff as any application
running in the context of the user can potentially steal passwords if 1password
is in an unlocked state.
With CVE-2017-7643 I disclosed a command injection vulnerablity in the KLoader
binary that ships with Proxifier <= 2.18.
Unfortunately 2.19 is also vulnerable to a slightly different attack that
yields the same result.
Proxifier 2.18 (also 2.17 and possibly some earlier version) ships with a
KLoader binary which it installs suid root the first time Proxifier is run. This
binary serves a single purpose which is to load and unload Proxifier's kernel
Unfortunately it does this by taking the first parameter passed to it on the
4 Jan 2017 18:21 | AWS
As a follow-up to my previous post about making immutable S3 backups using
Lambda, this is an additional Lambda function you can use to verify that your
backup actually ran.
You'll want to configure it to run at around 10-15mins past the hour so the
backup has some time to complete. It will look for the backup files that should
S3 is really handy for server backups and at $0.023/GB/month it's incredibly
However the default way most people use it is to simply spray their data
directly into an S3 bucket from the machine they're backing up. This works fine
right up until you get hacked by someone malicious who then has the ability to
The vim keybindings are wonderful once you get used to them.
What some people don't know is that the same keybindings are available in other
programs, for example bash has a "vi mode" which can be enabled with:
set -o vi
11 Dec 2016 13:11 | macOS
SuperDuper! from ShirtPocket software is fantastic backup utility. It lets you
create a full bootable clone of your mac that you can boot from any machine.
Not only is this a great way to backup your data but if your main machine dies
you can plug the backup drive into any mac, boot from it using the option key
at startup and be straight back into your environment.
10 Dec 2016 17:18 | vim
If you're a vim fanboy like me you may often find it frustrating when logging into
another machine that the default vim config isn't very nice to use. Sometimes the
remote machine has a shared user account so changing it to your liking isn't really
To work around this and make my life easier I created this:
Another hilarious and trivial rubygems exploit. The file ext/<ext>/extconf.rb
gets executed as root during installation. A malicious gem could put code in
there that installs a backdoor.
Demonstration PoC: https://github.com/m4rkw/rubygems-poc2
RubyGems is a nice system, very easy to use and also easy to abuse. Anyone can push
a gem straight into the global namespace, even if the gem has the same name as a core
This can be trivially abused to break into systems of anyone who isn't very careful
what gems they use (and let's be honest, that's probably a lot of developers :).
12 Nov 2015 12:28 | apple | iOS
I decided to roll my tethering bypass idea into a script to make it easy to
This script automates the fiddly configuration bits and gives you a quick way
to throw up a proxy that will bypass tethering restrictions on iOS.
24 Oct 2015 11:26 | apple | iOS
It's often annoying that Apple lets carriers disable tethering at will,
especially when the carrier has already sold you "unlimited" data. Three allow
free data when roaming in "feel at home" countries but they don't allow
tethering at all, even if you're willing to pay for it.
After being irritated by these restrictions on several holidays I decided to
15 Oct 2015 22:11 | apple | iOS
I've always been fairly cynical about Siri. It seemed more like a gimmick than
something people would use seriously in their day to day lives, but I've
recently discovered how wrong I was.
I don't have a CarPlay stereo in my car, because I didn't want to be tied into
Apple's apps. Maps is nowhere near as good as TomTom (which I also paid good
31 Aug 2015 22:23 | apple | iOS
Despite Apple's best efforts, there are nearly always a number of users who
experience issues after a major iOS update. Users might experience crashes,
unusually high battery drain, slowness etc etc.
Whenever I upgrade to a major iOS release I usually do a fresh reinstall of
iOS. Although Apple provides no official way to do this without losing all of
When I started building my new website, I didn't want to be boring and just use
rails so I decided to write my work super-lightweight ruby web framework.
It's powering this website but is quite basic and rough so probably shouldn't
be used by anyone.
I've written a couple of ruby gems that people might find useful..
tvfeed - https://github.com/m4rkw/tvfeed
A gem designed to provide a feed of new TV episodes as magnet links from
torrent sites. This is offered purely for research purposes and should suit
1 Jul 2015 16:53 | apple
I wanted to like Apple Music, I really really did. I never really got into
Spotify but the hassle of finding new music is a constant problem for me. As
you can see from my music page on this very website, I go through music at a
crazy rate. I've bought over 1500 songs from iTunes over the last few years
and only around 266 are still in my playlist. Finding new music that I like is
a constant struggle and I generally resort to scraping sites like beatport.com,
30 Jun 2015 21:07 | apple
This has been driving me nuts for months and I finally figured it out - smart
playlists break iTunes Match.
I have a smart playlist simply called "Music" which is configured as:
Match all of:<br/>
strace is really useful on Linux for figuring out why some program isn't doing
what it should.
Not sure how many people know this but you can do the same thing on darwin
using dtruss, it's just no quite so obvious. Using this script:
18 Jun 2015 08:44 | security
Don't you just hate it when an emergency happens with an important server and
access from your location is firewalled? Luckily if there's someone else local
to the machine who can execute commands for you, getting onto it is fairly
First make sure that the machine you're on can accept connections from the
As PHP frameworks go, Symfony 2 isn't entirely terrible. Before this project
it had been a while since I used Symfony, and back then it was still on version
1.something. These days it's kinda cool, allows easy use of popular design
patterns and doctrine works reasonably well.
There are some things I find frustrating though, often you spend more time
There are many reasons why PHP is a shit programming language, many of which
are discussed at length in this article:
But the main thing that bugs me is how inelegant it is. You can get things
This is an awesome article:
I've been in this situation before when "agile" processes were strewn like
cancer throughout a project I really cared about like, with depressing results.