CVSROOT:        /cvs
Module name:    src
Changes by:     dera...@cvs.openbsd.org 2020/10/27 15:06:57

Modified files:
        lib/libc/stdio : vfprintf.c vfwprintf.c 

Log message:
The printf format string component %n is a nearly turning-complete gadget.
Largely considered attack surface nowadays.  The benefit provided by %n
is completely overshadowed by the risk.

New uses of %n don't seem to be entering the C ecosystem, as static
tools flag them.  And everyone points fingers at those people....

The list of programs (and libraries) which use %n is therefore finite
and shrinking.  Most of the %n use comes out of the GNU ecosystem.
jca@ has convinced gnulib to fix their code (so we need to wait for
software including gnulib to make new releases).

A few libraries have moved ahead of us and become more strict.  Some n
longer permit %n (for instance, andriod bionic). Others log the occurance.
Some log and abort if the output location is W|X (MacOS).

Our base tree is clean.  The ports tree contains a handful during
build time, and unknown count (more) during runtime.

We would like to abort programs on any occurance of %n.  Or we could
be like MacOS, aborting for W|X pages (but would need a system call
which can check that condition, and that introduces addressspace
knowledge we don't want attackers to know, and may be a poor tradeoff).

For now, we can syslog, to increase awareness, and involve more people
in the greater community to remove %n uses.

[If %n is at the end, use the *printf return value.  If it occurs in
the middle, split the printf calls into multiples]

Hopefully one day, we can just abort() when %n happens.  Help us get
there?

ok jca, plus naddy for ports team

Reply via email to