Does Linux process exist information leakage?
Scott Lovenberg
scott.lovenberg at gmail.com
Thu Jan 19 09:47:35 EST 2012
On Mon, Jan 16, 2012 at 18:45, Jonathan Neuschäfer <j.neuschaefer at gmx.net>wrote:
> On Mon, Jan 16, 2012 at 01:19:22PM -0500, Scott Lovenberg wrote:
> > Let me walk you guys through how this bug could be exploited.
> > The file that you want to access is blocked from you by file system
> > permissions. The root user (uid==0) can access this file (that contains
> > credentials) and read it into memory that it has malloc()'ed. After the
> > process running as root is done, it free()'s the memory without zeroing
> it
> > out. Now you (you clever hacker) spawn a process that requests memory in
> > large hunks. It then searches for the string "password=" in that memory.
> > Since the memory was free()'ed back to the pool without being changed,
> it
> > still contains the original information that was in the file that you
> > cannot read. Does this make sense, or should I go into t a bit more
> detail?
>
> But can you actually get this dirty memory on Linux?
>
> I know two sources of memory that are used by malloc. One is brk(), the
> other is mmapped pages of /dev/zero. With /dev/zero it's obvious that
> you get empty pages (all-zero); with brk I wasn't sure so I wrote the
> test program below and ran it. I didn't find any dirty (non-zero) memory.
>
> Thanks,
> Jonathan Neuschäfer
>
>
> --
> #include <unistd.h>
> #include <stdio.h>
>
> #define BLOCKSZ (1024 * 1024) /* one Mibi */
>
> int main(void)
> {
> int maxmb = 1024;
> unsigned i;
> void *BRK;
>
> BRK = sbrk(0);
>
> for (i = 0; i < maxmb; i++) {
> void *block = sbrk(BLOCKSZ);
> unsigned j, *p;
>
> if (block == (void *) -1) {
> printf("sbrk failed after %u blocks (%u bytes)\n",
> i, i * BLOCKSZ);
> break;
> }
>
> for (p = block, j = BLOCKSZ/sizeof(unsigned int); j--; p++)
> if (*p)
> printf("found data at BRK+%p: %u\n", ((void
> *)p) - BRK, *p);
> }
>
> return 0;
> }
>
Thanks for posting this. I'm embarrassed that I never even bothered to
check if dirty memory was given back. I guess I just assumed. You know
what they say about assumptions... Anyways, I think this is a great
discussion. :)
--
Peace and Blessings,
-Scott.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20120119/61cecfd7/attachment.html
More information about the Kernelnewbies
mailing list