automated cppcheck for gnupg
Leo Gaspard
ekleog at gmail.com
Wed Apr 16 12:41:07 CEST 2014
On Wed, Apr 16, 2014 at 09:21:20AM +0200, Werner Koch wrote:
> On Tue, 15 Apr 2014 23:35, ekleog at gmail.com said:
> > keeping it private costs virtually nothing. (The null dereference in libassuan
> > that Werner said he would fix tomorrow might be specially important,
>
> No it isn't: The code is similar to this
>
> ctx = malloc (sizeof *ctx);
> if (!ctx)
> {
> trace_error (ctx->err_source)
> return NULL;
> }
>
> but uses a macro for the tracing. This is a simple NULL deref which
> raises a segv (because for ages OSes do not map the first memory page).
> I had to replace a macro with a inline function to avoid double
> evaluation of a macro parameter.
[I'm assuming I'm not that off-topic, since you answered.]
Well... Actually, not long ago, I read about a null pointer dereference leading
to complete system compromise (it was used on a root-run program). Sure, it was
used in conjunction with a mac os x flaw (which forced the first page to be
mapped read-only to some kernel-space memory, but did not give any kernel-level
access); yet unfortunately I can't remember where I found it, nor the exact
details... (Only that it was something that tried to explain almost any kind of
bug can be turned into a "remote" code injection... perhaps a book, now that I
think about it..)
It thus requires local access to the system (anyway, to trigger a malloc
failure...), yet would (IIRC) allow some other user (or daemon) to peep into
your running gpg-agent (as, AFAIK, gpg-agent uses libassuan), and so uncovering
your secret key.
Here, the argument to gpg_strsource (assuming the point of the mistake is the
one of the latest git commit on libassuan) would be attacker-controlled, as a
consequence the one to gpg_err_source. Doing no check, it means the argument to
msgidxof would be attacker-controlled. I unfortunately do not know enough about
gettext to know whether dgettext and/or msgidxof are secure enough to (i) not
overflow the msgidx buffer, and (ii) not trigger a vulnerability in dgettext
and/or msgidxof.
Anyway, that's fixed now!
Cheers,
Leo
More information about the Gnupg-devel
mailing list