If you use unveil() without pledge(), you do not get the special-case-file-exposures-for-libc behaviours that pledge() brings.
You are then responsible for all path exposure. Morgan Aldridge <morg...@makkintosshu.com> wrote: > On Mon, Aug 7, 2023 at 3:57 AM Landry Breuil <lan...@openbsd.org> wrote: > > > Le Sat, Aug 05, 2023 at 07:41:12PM -0400, George Koehler a écrit : > > > On Sat, 5 Aug 2023 08:49:25 +0200 > > > Landry Breuil <lan...@openbsd.org> wrote: > > > > > > > I'm not sure i'll be able to look into it, but i'd rather *not* > > document > > > > 'workarounds' for issues until we're sure the issue isnt fixable. Maybe > > > > it's pledge/unveil related, maybe not. Using ktrace to figure out which > > > > files the browser tries to access when handling date-related functions > > > > might help... and if it's not an issue happening only on OpenBSD, then > > > > dealing with upstream is the way to go. > > > > > > I used ktrace. It's unveil. The fix is to add "/etc/localtime r" > > > to /etc/firefox/unveil.content > > > > many thanks george for the time spend of this and this detailed > > analysis. Definitely ok for me to add `/etc/localtime r` to > > /etc/firefox/unveil.content, if it doesnt need to unveil the full > > usr/share/zoneinfo subdir thats even simpler. > > > > Replicating George's test with the firefox port's default (unfixed) > /etc/firefox/unveil.content. I used my Xsunaba utility just to simplify > testing firefox as a fresh user, plus my own date_test.html (attached) > which calls the `new Date().toString()`, > `Intl.DateTimeFormat().resolvedOptions().timeZone`, and `new > Date().toLocaleString()` JavaScript methods: > > $ Xsunaba ktrace -di -f /home/xsunaba/firefox-stable-default-ktrace.out > firefox /home/xsunaba/Downloads/date_test.html > > 27628 is a content process that has called unveil and pledge: > > $ doas -u xsunaba kdump -HT -f > /home/xsunaba/firefox-stable-default-ktrace.out | grep 27628\\/ | less > > libc still is able to successfully open /etc/localtime first: > > 27628/276891 firefox 1692576139.506386 CALL > open(0xe92e849aac8,0<O_RDONLY>) > 27628/276891 firefox 1692576139.506392 NAMI "/etc/localtime" > 27628/276891 firefox 1692576139.506411 RET open 41/0x29 > > Then the content process cannot call realpath() on /etc/localtime as > unveil(2) hides it: > > 27628/276891 firefox 1692576139.522045 CALL > __realpath(0xe92d022a315,0x774762945ea0) > 27628/276891 firefox 1692576139.522048 NAMI "/etc/localtime" > 27628/276891 firefox 1692576139.522059 RET __realpath -1 errno 2 No > such file or directory > > It also fails to access /usr/share/zoneinfo/* due to being hidden by > unveil(2): > > 27628/276891 firefox 1692576139.522089 CALL > open(0xe92cffe36a6,0x30000<O_RDONLY|O_CLOEXEC|O_DIRECTORY>) > 27628/276891 firefox 1692576139.522094 NAMI "/usr/share/zoneinfo/" > 27628/276891 firefox 1692576139.522103 RET open -1 errno 2 No such > file or directory > > The firefox JS console outputs the following inconsistent date/time/zone: > > Sun Aug 20 2023 18:02:19 GMT-0600 (GMT-06:00) > EST > 8/20/2023, 7:02:19 PM > > * * * > > After adding '/etc/localtime r' to /etc/firefox/unveil.content: > > $ Xsunaba ktrace -di -f > /home/xsunaba/firefox-stable-unveil_localtime-ktrace.out firefox > /home/xsunaba/Downloads/date_test.html > > 61062 is a content process that has called unveil and pledge: > > $ doas -u xsunaba kdump -HT -f > /home/xsunaba/firefox-stable-unveil_localtime-ktrace.out | grep 61062\\/ | > less > > libc is still able to successfully /etc/localtime first: > > 61062/172260 firefox 1692578044.321975 CALL > open(0x8df50322ac8,0<O_RDONLY>) > 61062/172260 firefox 1692578044.321982 NAMI "/etc/localtime" > 61062/172260 firefox 1692578044.321999 RET open 41/0x2 > > Then the content process can call realpath() on /etc/localtime as unveil(2) > is no longer hiding it: > > 61062/172260 firefox 1692578044.333193 CALL > __realpath(0x8e03868b315,0x77b1cc5407f0) > 61062/172260 firefox 1692578044.333199 NAMI "/etc/localtime" > 61062/172260 firefox 1692578044.333210 NAMI > "/usr/share/zoneinfo/America/New_York" > 61062/172260 firefox 1692578044.333214 RET __realpath > > I no longer see an attempt nor error to open /usr/share/zoneinfo/. > > The firefox JS console outputs the following correct date/time/zone: > > Sun Aug 20 2023 20:34:04 GMT-0400 (Eastern Daylight Time) > America/New_York > 8/20/2023, 8:34:04 PM > > * * * > > In conclusion this does seem to resolve all the cases that I had identified > and since my second test doesn't seem to even attempt to open > /usr/share/zoneinfo, I believe that just unveiling /etc/localtime is > sufficient. > > I see that George has already committed unveiling /etc/localtime for > firefox content processes in the port, so many, _many_ thanks to George and > Landry! > > Morgan