[pgsql-jp: 38054] Advisory on possibly insecure security definer functions

ISHIDA Akio iakio @ mono-space.net
2007年 2月 20日 (火) 23:35:46 JST


こんにちは。石田@苫小牧市です。

既に
 [pgsql-jp: 38033]
ユーザー定義関数の脆弱性に関する石井達夫氏の最新記事を公開いたしました

での石井さんの記事にもありますが、
SECURITY DEFINERとsearch_pathに関するアドバイザリが出ています。

http://archives.postgresql.org/pgsql-general/2007-02/msg00679.php
[ANNOUNCE] Advisory on possibly insecure security definer functions

【PostgreSQLウォッチ】第34回
ユーザー定義関数の脆弱性に異例の勧告,任意のコードを実行される恐れ
http://itpro.nikkeibp.co.jp/article/COLUMN/20070218/261938/

SECURITY DEFINERとはUnixでいうところのsetuidのように、
関数が呼び出したユーザの権限ではなく作成者の権限で
動作する機能です。CREATE FUNCTIONするときに指定できます。
(デフォルトはSECURITY INVOKER)。
pg_proc.prosecdefで確認できます。

アドバイザリの内容は、SECURITY DEFINERを指定した
pl/pgsql等の関数では、必ず set search_pathを明示的に
指定しましょうというものです。

但し、石井さんの記事にもあるようにSQL関数に関しては
set search_pathによる対応はできません。
SECURITY DEFINERが必要なSQL関数があれば、
pl/pgsqlで書き直してしまうのが良いと思います。

# search_pathを元に戻さなきゃなならいんですね、、、
# ユーザがセッション内で set search_path しないという条件で
# あれば、reset seach_pathでもいいんですが。
-- 
ISHIDA Akio <iakio @ mono-space.net/ishida @ cycleof5th.com>



pgsql-jp メーリングリストの案内