Protect gateway from format-string crashes in data user/dbwells/fix_printf_gateway_crashes
authorDan Wells <dbw2@calvin.edu>
Tue, 6 Mar 2012 20:08:33 +0000 (15:08 -0500)
committerDan Wells <dbw2@calvin.edu>
Tue, 6 Mar 2012 20:29:48 +0000 (15:29 -0500)
commit753406e036b3966c8e4082965e348e74cb597804
tree4ded7dc155542e680b46790706cc71f74beb6393
parent67d4d5de8656128f32b20f4c04dbf81a1028e929
Protect gateway from format-string crashes in data

As a common security measure, printf-style formatting codes are
not allowed to be directly interpreted from a writable segment.
The gateway code currently has the following function call:

osrfLogActivity( OSRF_LOG_MARK, act->buf );

This is a variadic function which expects the 'act->buf' position
to contain a format string and any trailing arguments to be the
values passed to the formatter.  Since act->buf is the value of
what we passed in, some data inadvertantly contains format strings,
and since it is a writable segment, the program crashes.  Here is
an example of a crash-causing call:

http://localhost/osrf-gateway-v1?service=test&method=test&param=%22%251n%22

The param is interpreted as "%1n" and abruptly fails.

The simple solution is to include a formatter so that our param gets
demoted to being mere data, i.e.:

osrfLogActivity( OSRF_LOG_MARK, "%s", act->buf );

Signed-off-by: Dan Wells <dbw2@calvin.edu>
src/gateway/osrf_json_gateway.c