All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vasiliy Kulikov <segoon@openwall.com>
To: Alan Cox <alan@lxorguk.ukuu.org.uk>, Greg Kroah-Hartman <gregkh@suse.de>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
	Ingo Molnar <mingo@elte.hu>,
	Andrew Morton <akpm@linux-foundation.org>,
	James Morris <jmorris@namei.org>,
	Namhyung Kim <namhyung@gmail.com>,
	kernel-hardening@lists.openwall.com,
	linux-kernel@vger.kernel.org
Subject: [kernel-hardening] Re: [PATCH v2] kernel: escape non-ASCII and control characters in printk()
Date: Sat, 2 Jul 2011 12:10:22 +0400	[thread overview]
Message-ID: <20110702081022.GA2755@albatros> (raw)
In-Reply-To: <20110701154947.133c30f5@lxorguk.ukuu.org.uk>

On Fri, Jul 01, 2011 at 15:49 +0100, Alan Cox wrote:
> >  of the multiline feature.  Intoducing new "%S" format for single lines
> >  makes little sense as there are tons of printk() calls that should be
> >  already restricted to one line.
> 
> You don't need a new format string surely. Your expectation for printk is 
> 
> "multiple new lines are cool providing they are in the format string"
> 
> So that bit isn't hard to deal with, 
> 
> You make vprintk take an extra arg (trusted/untrusted args)

Not vprintk, but vscnprintf(), vsnprintf() and string() because
vprintk() is used in tens of places besides of printk().  Or better
implement _vscnprintf(.., bool untrusted) and 

vscnprintf(...) { return _vscnprintf(..., false); }

to leave current users of it as is.

But yes, I got the idea.


> You make printk pass 'untrusted'
> You make %s quote the arguments for control codes

What to do with CSI?  It is a valid byte inside of a UTF-8 string.
Parsing a supplied string assuming it is UTF-8 string and filtering CSI
iff it is not a part of UTF-8 symbol is something a bit ugly IMO.


Greg - do you know any devices supplying multibyte strings, but not in
UTF-8 encoding?  If yes, then CSI filtering is a bad idea :\


> At which point your attacker has more work to do but given a long string
> yawns and stars using the right number of spaces for the likely 80 col
> screen :)

Yeah, but introducing some artificial limit for string length is IMO
more harmfull: there is no universal limit for all situations, somewhere
the resulting string is already 70 chars and even 20 bytes would
overflow the col;  in rare cases a string of 50 bytes might be still
acceptable.


Thanks,

-- 
Vasiliy Kulikov
http://www.openwall.com - bringing security into open computing environments

WARNING: multiple messages have this Message-ID (diff)
From: Vasiliy Kulikov <segoon@openwall.com>
To: Alan Cox <alan@lxorguk.ukuu.org.uk>, Greg Kroah-Hartman <gregkh@suse.de>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
	Ingo Molnar <mingo@elte.hu>,
	Andrew Morton <akpm@linux-foundation.org>,
	James Morris <jmorris@namei.org>,
	Namhyung Kim <namhyung@gmail.com>,
	kernel-hardening@lists.openwall.com,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2] kernel: escape non-ASCII and control characters in printk()
Date: Sat, 2 Jul 2011 12:10:22 +0400	[thread overview]
Message-ID: <20110702081022.GA2755@albatros> (raw)
In-Reply-To: <20110701154947.133c30f5@lxorguk.ukuu.org.uk>

On Fri, Jul 01, 2011 at 15:49 +0100, Alan Cox wrote:
> >  of the multiline feature.  Intoducing new "%S" format for single lines
> >  makes little sense as there are tons of printk() calls that should be
> >  already restricted to one line.
> 
> You don't need a new format string surely. Your expectation for printk is 
> 
> "multiple new lines are cool providing they are in the format string"
> 
> So that bit isn't hard to deal with, 
> 
> You make vprintk take an extra arg (trusted/untrusted args)

Not vprintk, but vscnprintf(), vsnprintf() and string() because
vprintk() is used in tens of places besides of printk().  Or better
implement _vscnprintf(.., bool untrusted) and 

vscnprintf(...) { return _vscnprintf(..., false); }

to leave current users of it as is.

But yes, I got the idea.


> You make printk pass 'untrusted'
> You make %s quote the arguments for control codes

What to do with CSI?  It is a valid byte inside of a UTF-8 string.
Parsing a supplied string assuming it is UTF-8 string and filtering CSI
iff it is not a part of UTF-8 symbol is something a bit ugly IMO.


Greg - do you know any devices supplying multibyte strings, but not in
UTF-8 encoding?  If yes, then CSI filtering is a bad idea :\


> At which point your attacker has more work to do but given a long string
> yawns and stars using the right number of spaces for the likely 80 col
> screen :)

Yeah, but introducing some artificial limit for string length is IMO
more harmfull: there is no universal limit for all situations, somewhere
the resulting string is already 70 chars and even 20 bytes would
overflow the col;  in rare cases a string of 50 bytes might be still
acceptable.


Thanks,

-- 
Vasiliy Kulikov
http://www.openwall.com - bringing security into open computing environments

  reply	other threads:[~2011-07-02  8:10 UTC|newest]

Thread overview: 59+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-06-23 15:21 [kernel-hardening] [PATCH v2] kernel: escape non-ASCII and control characters in printk() Vasiliy Kulikov
2011-06-23 15:21 ` Vasiliy Kulikov
2011-06-26 10:39 ` [kernel-hardening] " Ingo Molnar
2011-06-26 10:39   ` Ingo Molnar
2011-06-26 16:54   ` [kernel-hardening] " Vasiliy Kulikov
2011-06-26 16:54     ` Vasiliy Kulikov
2011-06-26 18:26     ` [kernel-hardening] " Ingo Molnar
2011-06-26 18:26       ` Ingo Molnar
2011-06-26 19:06       ` [kernel-hardening] " Vasiliy Kulikov
2011-06-26 19:06         ` Vasiliy Kulikov
2011-06-26 19:46         ` [kernel-hardening] " Ingo Molnar
2011-06-26 19:46           ` Ingo Molnar
2011-06-26 20:25           ` [kernel-hardening] " Vasiliy Kulikov
2011-06-26 20:25             ` Vasiliy Kulikov
2011-06-26 22:01             ` [kernel-hardening] " Ingo Molnar
2011-06-26 22:01               ` Ingo Molnar
2011-06-27  8:36               ` [kernel-hardening] " Vasiliy Kulikov
2011-06-27  8:36                 ` Vasiliy Kulikov
2011-06-27  9:20                 ` [kernel-hardening] " Vasiliy Kulikov
2011-06-27  9:20                   ` Vasiliy Kulikov
2011-06-27  9:40                 ` [kernel-hardening] " Alan Cox
2011-06-27  9:40                   ` Alan Cox
2011-06-27 18:38                   ` [kernel-hardening] " Vasiliy Kulikov
2011-06-27 18:38                     ` Vasiliy Kulikov
2011-06-28 19:30                     ` [kernel-hardening] " Linus Torvalds
2011-06-28 19:30                       ` Linus Torvalds
2011-07-01 12:00                       ` [kernel-hardening] " Ingo Molnar
2011-07-01 12:00                         ` Ingo Molnar
2011-07-01 12:54                         ` [kernel-hardening] " Vasiliy Kulikov
2011-07-01 14:20                           ` Alan Cox
2011-07-02 16:42                             ` Solar Designer
2011-07-02 16:42                               ` Solar Designer
2011-07-02 19:33                               ` [kernel-hardening] " Alan Cox
2011-07-02 19:33                                 ` Alan Cox
2011-07-02 20:34                                 ` [kernel-hardening] " Linus Torvalds
2011-07-02 20:34                                   ` Linus Torvalds
2011-07-01 14:37                       ` [kernel-hardening] " Vasiliy Kulikov
2011-07-01 14:37                         ` Vasiliy Kulikov
2011-07-01 14:49                         ` [kernel-hardening] " Alan Cox
2011-07-01 14:49                           ` Alan Cox
2011-07-02  8:10                           ` Vasiliy Kulikov [this message]
2011-07-02  8:10                             ` Vasiliy Kulikov
2011-07-02 15:08                             ` [kernel-hardening] " Greg KH
2011-07-02 15:08                               ` Greg KH
2011-07-03 10:01                           ` [kernel-hardening] " Vasiliy Kulikov
2011-07-03 10:01                             ` Vasiliy Kulikov
2011-07-03 11:42                             ` [kernel-hardening] " Vasiliy Kulikov
2011-07-03 11:42                               ` Vasiliy Kulikov
2011-07-03 12:23                             ` [kernel-hardening] " Alan Cox
2011-07-03 12:23                               ` Alan Cox
2011-07-03 17:42                             ` [kernel-hardening] " Linus Torvalds
2011-07-03 17:42                               ` Linus Torvalds
2011-07-03 21:10                               ` [kernel-hardening] " Alan Cox
2011-07-03 21:10                                 ` Alan Cox
2011-07-03 21:34                                 ` [kernel-hardening] " Linus Torvalds
2011-07-03 21:34                                   ` Linus Torvalds
2011-07-05 17:49                               ` [kernel-hardening] " Vasiliy Kulikov
2011-07-01 12:12                 ` Ingo Molnar
2011-07-01 12:12                   ` Ingo Molnar

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20110702081022.GA2755@albatros \
    --to=segoon@openwall.com \
    --cc=akpm@linux-foundation.org \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=gregkh@suse.de \
    --cc=jmorris@namei.org \
    --cc=kernel-hardening@lists.openwall.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=namhyung@gmail.com \
    --cc=torvalds@linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.