Sample Header Ad - 728x90

Reproduce setcap behavior with capsh

1 vote
1 answer
501 views
There is a non-capability-aware program that requires at least 1) cap_sys_admin and 2) either cap_dac_override or cap_dac_read_search. This can be proven as follows:
sudo setcap 'all=ep cap_sys_admin-ep' ./binary`                        # ./binary doesn't work
sudo setcap 'all=ep cap_dac_override-ep' ./binary`                     # ./binary works
sudo setcap 'all=ep cap_dac_read_search-ep' ./binary                   # ./binary works
sudo setcap 'all=ep cap_dac_override,cap_dac_read_search-ep' ./binary  # ./binary doesn't work
I want to do the same checks using capsh instead of setcap. Before these checks, all file capabilities are removed using sudo setcap -r ./binary. The first tree succeed, the results match setcap:
sudo capsh --user=jdoe --keep=1 --caps="all=eip" --addamb="all" --delamb="cap_sys_admin" -- -c ./binary
sudo capsh --user=jdoe --keep=1 --caps="all=eip" --addamb="all" --delamb="cap_dac_override" -- -c ./binary
sudo capsh --user=jdoe --keep=1 --caps="all=eip" --addamb="all" --delamb="cap_dac_read_search" -- -c ./binary
The last one fails, the program still works while it shouldn't:
sudo capsh --user=jdoe --keep=1 --caps="all=eip" --addamb="all" --delamb="cap_dac_override,cap_dac_read_search" -- -c ./binary
Is there some difference between filesystem and process capabilities that I fail to notice? How do I write the third test properly?
Asked by PlushBeaver (113 rep)
Sep 2, 2022, 11:51 AM
Last activity: Sep 11, 2022, 12:12 AM