トップ > サポート > 旧製品の更新ツール > Support S-PLUS for UNIX security

S-PLUS for UNIXのセキュリティ問題について

マルチユーザでS-PLUSを利用しているUNIXシステム上に、もしログイン可能な悪意のあるユーザがいる場合、/tmpへのシンボリックリンクによりファイルを改変される可能性があります。
ただし、この設定で改変される可能性があるのは、ユーザが書き込み権を持つファイル(通常自分自身のファイル)のみです。また、悪意のあるユーザが該当システムへの login 権限を持っている場合に限ります。

symbolic link attack に関して

S-PLUSは /tmp に一時ファイルを作成することがあります。もし悪意のあるユーザが、壊したい対象のファイルを /tmp で同名でシンボリックリンクを張っておくと、S-PLUS起動時にこのファイルが置き換えられることがあります。

詳細は http://online.securityfocus.com/archive/1/305342 をご覧ください。

対応方法

もしあなたのUNIXシステムに悪意のあるユーザが存在する可能性がある場合は、システム管理者は以下の対応をとってください。なお、この問題は将来リリースのS-PLUSで修正される予定です。

(ls -ld /tmp/__F[0-9]* 2>/dev/null;echo "") | grep '^l'
if [ $? != 1 ] ; then
        echo "$0: Possible security problem:"
        echo "$0: a symbolic link with a name of the form '/tmp/__F[0-9]*' exists"
        echo "$0: Please remove it and try again"
        exit 1
fi
.tempfile <- get("tempfile", "splus")
tempfile <- function(pattern = "file") {
if(exists(".Stempdir", 0))
ptn <- get(".Stempdir", 0)
else {
## initialize, but check that the .tempfile version
## uses /tmp file names. Basically a check for platform
ptn <- .tempfile()
if(identical(substring(ptn, 1, 5), "/tmp/")) {
ptn <- paste("/tmp/S_tmp", unix("echo $$"), sep="")
## make the directory, lock out others
status <- unix(paste("mkdir -m 700", ptn), output = FALSE)
if(status != 0) {
warning("Command to create directory \"", ptn,
"\" failed; reverting to standard, insecure tempfile")
ptn <- character()
}
else ptn <- paste(ptn, "/", sep="")
assign(".Stempdir", ptn, where = 0)
}
}
if(length(ptn) > 0)
paste(ptn, pattern, unix("echo $$"), sep = "")
else
.tempfile(pattern)
}
# cd `Splus6 SHOME`/cmd
# chmod a-x PRINT mustfix.hlinks sghl2html

(2003/1/27 更新)