git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH/RFC/GSoC 3/3] t0301: test credential-cache support of XDG_RUNTIME_DIR

From
Jeff King <peff@peff.net>
Date
Mar 16, 2016, 16:55 UTC
Message-ID
<20160316165527.GA4039@sigill.intra.peff.net>
In-Reply-To
<CAKqreuwRpS3uP6=afm-0pBkPW0-bqoJconnKO5q3qTgZwdU_xQ@mail.gmail.com>
On Thu, Mar 17, 2016 at 12:40:59AM +0800, 惠轶群 wrote:
Show 25 quoted lines
> > Is it better to have the fallback in /tmp, and not in
> > ~/.git-credential-cache/, and why?
> >
> > Is it because the wish is to always use /tmp/git-$uid/ as a fallback
> > for $XDG_RUNTIME_DIR (as opposed to ~/.git-credential-cache/, which
> > is specific to the credential-cache and would look strange if we
> > used it for other "runtime" things)?
> 
> Yes, I mean to use it as a general fallback for git.
> 
> xdg base dir spec does not specify where to fallback when
> $XDG_RUNTIME_DIR is not defined. It just says:
> 
> If $XDG_RUNTIME_DIR is not set applications should fall back to
> a replacement directory with similar capabilities and print a warning
> message. Applications should use this directory for communication
> and synchronization purposes and should not place larger files in it,
> since it might reside in runtime memory and cannot necessarily be
> swapped out to disk.
> 
> tmpfs is just like what it describes. And many other applications
> put socket under which, such as tmux.
> 
> On the other hand, I think, falling back to $HOME/.git-credential-cache/socket
> doesn't make any sense for back-compability cannot be ensured.

If we are going to use a publicly accessible directory like /tmp, I think we need to start worrying about tmp-races with malicious users.

Right now we make sure that an existing socket directory is mode 0700. That's just a courtesy check that the user didn't create it themselves with a permissive mode. But we don't check the owner of the directory, and our check is racy with accessing the directory.

So if we blindly use an existing /tmp/git-$uid, I think an attacker can race with:

    dir=/tmp/git-$victimuid
    mkdir $dir
    while true; do
        chmod 0700 $dir
	chmod 0777 $dir
    done

If the victim does their mode check while the 0700 is in effect, but then creates the socket during the 0777 moment, they won't notice anything amiss. And the attacker will have access to their credential socket.

This is a classic /tmp race. I imagine it's less of an issue in this day and age when people mostly have their own machines and their own /tmp, but we still should not recreate the mistakes of the past.

-Peff
Previous: 惠轶群Next: Junio C Hamano
Message 14 of 30 in “[GSOC] Microproject "Move ~/.git-credential-cache to ~/.config/git"”
  1. 惠轶群Mar 14, 2016
  2. Junio C HamanoMar 14, 2016
  3. 惠轶群Mar 14, 2016
  4. Junio C HamanoMar 14, 2016
  5. 惠轶群Mar 15, 2016
  6. Your friendMar 15, 2016
  7. Jeff KingMar 15, 2016
  8. 1/3 path.c: implement xdg_runtime_dir()Hui Yiqun, Mar 16, 2016
  9. 2/3 git-credential-cache: put socket to xdg-compatible pathHui Yiqun, Mar 16, 2016
  10. 惠轶群Mar 17, 2016
  11. 3/3 t0301: test credential-cache support of XDG_RUNTIME_DIRHui Yiqun, Mar 16, 2016
  12. Junio C HamanoMar 16, 2016
  13. 惠轶群Mar 16, 2016
  14. Jeff KingMar 16, 2016
  15. Junio C HamanoMar 16, 2016
  16. 谭俊浩Mar 17, 2016
  17. Junio C HamanoMar 17, 2016
  18. 惠轶群Mar 17, 2016
  19. 惠轶群Mar 17, 2016
  20. Jeff KingMar 16, 2016
  21. 惠轶群Mar 18, 2016
  22. Jeff KingMar 16, 2016
  23. 惠轶群Mar 17, 2016
  24. Ivan ThamMar 15, 2016
  25. Jeff KingMar 15, 2016
  26. 惠轶群Mar 16, 2016
  27. Jeff KingMar 18, 2016
  28. 惠轶群Mar 18, 2016
  29. 惠轶群Mar 18, 2016
  30. credential-cache--daemon: clarify "exit" action semanticsJeff King, Mar 18, 2016

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.