On Tue, Oct 24, 2017 at 01:31:32PM +0200, Sebastien Marie wrote: > > This is why I asked if the pledge is too tight on cpio. > > I agree that it could be disappointing. but cpio is pledged, so it > couldn't open /etc/spwd.db, because we considered this operation as > a privilegied operation. > > in order to backup this file, you need another tool. someone already > mentioned dump(8) as example.
So all an attacker has to do is call pledge() again, with LESS permissive promises, i.e. giving up getpw? #include <stdio.h> #include <unistd.h> int main() { if (pledge("stdio rpath getpw", NULL) == -1) err("pledge"); printf("first fopen %s\n", fopen("/etc/spwd.db", "r") ? "succeeded" : "failed"); if (pledge("stdio rpath", NULL) == -1) err("pledge"); printf("second fopen %s\n", fopen("/etc/spwd.db", "r") ? "succeeded" : "failed"); return 0; } first fopen failed second fopen succeeded Daniel