9fans - fans of the OS Plan 9 from Bell Labs
 help / color / mirror / Atom feed
From: arisawa <arisawa@ar.aichi-u.ac.jp>
To: Fans of the OS Plan 9 from Bell Labs <9fans@9fans.net>
Subject: Re: [9fans] shell functions
Date: Mon, 29 Sep 2014 22:03:15 +0900	[thread overview]
Message-ID: <CC7DC1E3-61D3-4C10-B0CE-CD1DA60BA75A@ar.aichi-u.ac.jp> (raw)
In-Reply-To: <ab43d3eb17651d3835a63b7bfb3d39e5@hamnavoe.com>

Hi, Richard,

Problems comes from careless CGI handling.

keep the following result in mind 
term% 'fn#foo'='fn foo {echo yes}; echo no
	'
term% rc
no
term%

today, we have a number of malicious request to our web server.
assume a web server accept a request with a query
	query='fn#foo=fn%20foo%20{echo%20yes};%20echo%20no%0a’
if the query is processed as follows: (the explanation is only for demo)
term% query='fn#foo=fn%20foo%20{echo%20yes};%20echo%20no%0a'
term% echo $query
fn#foo=fn%20foo%20{echo%20yes};%20echo%20no%0a
term% ifs='=' a=`{echo -n $query}
term% b=`{echo -n $a(2) | sed 's/%20/ /g; s/%0a/\n/g'}
term% echo -n $b
fn foo {echo yes}; echo no

term% $a(1)=$b
term% rc
no
term%

we can avoid such attacks by putting a prefix (say ‘QS_' as Pegasus does) at the last stage.
	QS_$a(1)=$b

assume the input field is “name”, then some people believe $a(1) is “name”, and may carelessly 
execute for simplicity
	$a(1)=$b
and such CGI will work for almost all cases (because they are not malicious).

even if extra command in
	fn foo {…}; maliciouscommand
is removed in starting rc, careless handling makes problem.
however it is much different in dangerousness between some environment variable are destroyed
and arbitrary commands can be executed. 

Kenji Arisawa

2014/09/28 18:39、Richard Miller <9fans@hamnavoe.com> のメール:

>> when rc is invoked, rc reconstructs shell variable and shell functions using files in /env/.
>> in case of shell functions, rc evaluates whole data in the file.
>> this feature makes problem if the content is
>> 	fn foo {…}; maliciouscommand
> 
> How would a malicious agent put something into /env?  If it's possible,
> how is this different from putting something into $home/bin/rc or
> binding something into /rc/bin ?
> 
> 




  reply	other threads:[~2014-09-29 13:03 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CAL0h+tWUCrwWoTSeLz+Kx1yqKwKqwDBZZbH7fLe-PWXjLSgWWw@mail.gmail.com>
2014-09-26 15:54 ` Russ Cox
2014-09-26 16:32   ` [9fans] " Kurt H Maier
2014-09-26 16:44     ` Skip Tavakkolian
2014-09-26 16:55       ` Kurt H Maier
2014-09-29 15:30     ` Russ Cox
2014-09-26 16:48   ` Bakul Shah
2014-09-27 14:40   ` Christian Neukirchen
2014-09-28  7:00     ` arisawa
2014-09-28  9:39       ` Richard Miller
2014-09-29 13:03         ` arisawa [this message]
2014-09-29 13:20           ` Charles Forsyth
2014-10-01  9:37             ` arisawa
2014-09-29 18:05           ` erik quanstrom

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=CC7DC1E3-61D3-4C10-B0CE-CD1DA60BA75A@ar.aichi-u.ac.jp \
    --to=arisawa@ar.aichi-u.ac.jp \
    --cc=9fans@9fans.net \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).