【活用ガイド】

CWE-287

Weakness ID:287(Weakness Class)

Status: Draft

不適切な認証

解説

解説要約

ユーザが与えられた識別を所持していることを主張した際に、ソフトウェアにおいてその主張が正しいことを適切に証明しないという問題です。

別名

authentification

別名として、非英語圏では一般的に「認証(authentification)」が使用されます。

AuthC

"AuthC" は web アプリケーションのセキュリティにおいて、「認証 (authentication)」 の省略形として使用されています。 「認可 (authorization)」 の略語である "AuthZ" とは区別して使用されます。"Auth" のみでは「認証 (authentication)」と「認可 (authorization)」のどちらか区別がつかないため、"Auth" のみでの使用は推奨されません。

脆弱性の発生時期

アーキテクチャおよび設計
実装

該当するプラットフォーム

言語

言語に依存

一般的な影響

 

影響を受ける範囲 影響
完全性
アクセス制御
本脆弱性はリソースや機能に関する情報を、意図しないユーザに対して漏洩してしまう可能性があります。場合によっては、攻撃者が機密情報を取得、ないし任意のコードを実行する恐れがあります。

 

攻撃を受ける可能性

中〜高

検出手段

自動静的分析
自動静的分析ツールにより、よくある Apache HTTP Server の .htaccess のような設定ファイルや、一般に利用されている認証ライブラリといったタイプの認証を検出可能です。

一般的に、自動静的分析用のツールでカスタマイズされた認証スキームを検出するのは困難です。
さらに、大抵のソフトウェア設計では任意のユーザが確認なしでアクセス可能な機能を含んでいます。

有効性:限定的

手動静的分析
本脆弱性は、手動による解析、ペネトレーションテスト、脅威モデリング、アクティブなセッションを記録し変更できる対話的なテストツール等を組み合わせることで、検出可能です。

手動静的分析はカスタマイズされた認証メカニズムの正確性を評価することにおいて有効です。

有効性:高
手動分析は完全に自動化された手段よりも効果的です。脆弱性が設計及びビジネスルールに関係する場合に特に有効です。

脆弱なコード例

例 1:

 

以下のコードは、ユーザがすでにログインしているかを確認するものです。もしログインしていない場合、このコードはユーザから入力されたユーザ名とパスワードで認証します。ログインに成功すると cookie に "loggedin" という内容を保存し、このユーザがすでにログイン済みであることを 「記憶」させます。最後に、このコードではユーザの cookie に記録されたログインユーザ名が "Administrator" である場合、管理者用のタスクを実行します。

サンプルコード:Perl (悪い例)
my $q = new CGI;

if ($q->cookie('loggedin') ne "true") {
if (! AuthenticateUser($q->param('username'), $q->param('password'))) {
ExitError("Error: you need to log in first");
}
else {
# Set loggedin and user cookies.
$q->cookie(
-name => 'loggedin',
-value => 'true'
);
$q->cookie(
-name => 'user',
-value => $q->param('username')
);
}
}

if ($q->cookie('user') eq "Administrator") {
DoAdministratorTasks();
}

残念ながら、このコードは回避可能です。攻撃者はコードがユーザ名とパスワードをチェックしないように、 cookie のみをセットすることが可能です。攻撃者は以下のようなヘッダを含む HTTP リクエストによりこの回避を実現します。

(攻撃者)
GET /cgi-bin/vulnerable.cgi HTTP/1.1
Cookie: user=Administrator
Cookie: loggedin=true

[body of request]

攻撃者は cookie の loggedin の値を "true"(真)とセットすることにより、認証チェックを全て回避します。cookie 上のユーザ名を "Administrator" に設定し、ソフトウェアの管理者権限を入手します。

 

例 2:

&nbsp;</p>2009年1月、ある攻撃者が Twitter サーバに管理者としてアクセスに成功するという事件が発生しました。 Twitter サーバがログイン試行の回数を制限していなかったことが原因です。攻撃者は Twitter のサポートチームのメンバーを狙い、膨大な数の一般的なパスワードを試すブルートフォース攻撃によりパスワードを推測することに成功しました。サポートメンバーとしてアクセスに成功すると、管理者画面によって資産家や政治家 33 名のアカウントを入手し、入手したユーザになりすました偽の Twitter メッセージを送信しました。

参照情報:
Kim Zetter. "Weak Password Brings ‘Happiness’ to Twitter Hacker". 2009-01-09. 
<http://www.wired.com/threatlevel/2009/01/professed-twitt/>. 

発見された事例

 

参照 詳細
CVE-2009-3421 login script for guestbook allows bypassing authentication by setting a "login_ok" parameter to 1.
CVE-2009-2382 admin script allows authentication bypass by setting a cookie value to "LOGGEDIN".
CVE-2009-1048 VOIP product allows authentication bypass using 127.0.0.1 in the Host header.
CVE-2009-2213 product uses default "Allow" action, instead of default deny, leading to authentication bypass.
CVE-2009-2168 chain: redirect without exit (CWE-698) leads to resultant authentication bypass.
CVE-2009-3107 product does not restrict access to a listening port for a critical service, allowing authentication to be bypassed.
CVE-2009-1596 product does not properly implement a security-related configuration setting, allowing authentication bypass.
CVE-2009-2422 authentication routine returns "nil" instead of "false" in some situations, allowing authentication bypass using an invalid username.
CVE-2009-3232 authentication update script does not properly handle when admin does not select any authentication modules, allowing authentication bypass.
CVE-2009-3231 use of LDAP authentication with anonymous binds causes empty password to result in successful authentication
CVE-2005-3435 product authentication succeeds if user-provided MD5 hash matches the hash in its database; this can be subjected to replay attacks.
CVE-2005-0408 chain: product generates predictable MD5 hashes using a constant value combined with username, allowing authentication bypass.

 

被害の緩和策

フェーズ:アーキテクチャおよび設計

戦略:ライブラリ、フレームワーク
OWASP ESAPI Authentication 機能等、認証フレームワークやライブラリを使用してください。

関係性

 

Nature Type ID Name View(s) this relationship pertains to
ChildOf Category 254 Security Features Development Concepts (primary)699
ChildOf Weakness Class 693 Protection Mechanism Failure Research Concepts (primary)1000
ChildOf Category 718 OWASP Top Ten 2007 Category A7 - Broken Authentication and Session Management Weaknesses in OWASP Top Ten (2007) (primary)629
ChildOf Category 724 OWASP Top Ten 2004 Category A3 - Broken Authentication and Session Management Weaknesses in OWASP Top Ten (2004) (primary)711
ChildOf Category 812 OWASP Top Ten 2010 Category A3 - Broken Authentication and Session Management Weaknesses in OWASP Top Ten (2010) (primary)809
ParentOf Weakness Class 300 Channel Accessible by Non-Endpoint ('Man-in-the-Middle') Development Concepts (primary)699
Research Concepts (primary)1000
ParentOf Weakness Variant 301 Reflection Attack in an Authentication Protocol Development Concepts (primary)699
Research Concepts (primary)1000
ParentOf Weakness Base 303 Incorrect Implementation of Authentication Algorithm Development Concepts (primary)699
Research Concepts (primary)1000
ParentOf Weakness Base 304 Missing Critical Step in Authentication Development Concepts (primary)699
ParentOf Weakness Variant 306 Missing Authentication for Critical Function Development Concepts (primary)699
Research Concepts (primary)1000
ParentOf Weakness Base 307 Improper Restriction of Excessive Authentication Attempts Development Concepts (primary)699
Research Concepts (primary)1000
ParentOf Weakness Base 308 Use of Single-factor Authentication Development Concepts (primary)699
Research Concepts (primary)1000
ParentOf Weakness Base 309 Use of Password System for Primary Authentication Development Concepts (primary)699
Research Concepts (primary)1000
ParentOf Weakness Base 322 Key Exchange without Entity Authentication Research Concepts (primary)1000
ParentOf Compound Element: Composite 384 Session Fixation Development Concepts699
Research Concepts (primary)1000
ParentOf Weakness Class 592 Authentication Bypass Issues Development Concepts (primary)699
Research Concepts (primary)1000
ParentOf Weakness Base 603 Use of Client-Side Authentication Development Concepts (primary)699
Research Concepts1000
ParentOf Weakness Base 645 Overly Restrictive Account Lockout Mechanism Development Concepts (primary)699
Research Concepts (primary)1000
ParentOf Weakness Base 798 Use of Hard-coded Credentials Research Concepts (primary)1000
ParentOf Weakness Base 804 Guessable CAPTCHA Development Concepts699
Research Concepts1000
MemberOf 635 Weaknesses Used by NVD Weaknesses Used by NVD (primary)635
CanFollow Weakness Base 304 Missing Critical Step in Authentication Research Concepts1000
CanFollow Weakness Base 613 Insufficient Session Expiration Development Concepts699
Research Concepts1000

 

関係性の補足

SQL インジェクションや、その他の脆弱性の結果として発生する可能性があります。

他組織での分類

 

組織名または組織での分類 ノード ID CWEの分類との適合度 分類名
PLOVER Authentication Error
OWASP Top Ten 2007 A7 CWE の方が詳細 Broken Authentication and Session Management
OWASP Top Ten 2004 A3 CWE の方が詳細 Broken Authentication and Session Management
WASC 1 Insufficient Authentication

 

関連する攻撃パターン

 

CAPEC-ID 攻撃パターン名 (CAPEC Version 1.5)
22 Exploiting Trust in Client (aka Make the Client Invisible)
94 Man in the Middle Attack
57 Utilizing REST's Trust in the System Resource to Register Man in the Middle
114 Authentication Abuse

 

参照

OWASP. "Top 10 2007-Broken Authentication and Session Management". <http://www.owasp.org/index.php/Top_10_2007-A7>.
OWASP. "Guide to Authentication". <http://www.owasp.org/index.php/Guide_to_Authentication>.
Microsoft. "Authentication". <http://msdn.microsoft.com/en-us/library/aa374735(VS.85).aspx>.
[REF-11] M. Howard and D. LeBlanc. "Writing Secure Code". Chapter 4, "Authentication" Page 109. 2nd Edition. Microsoft. 2002. 

更新履歴

[2011年04月21日]
  2010年10月12日時点のデータを元に更新
[2009年06月29日]
  2009年02月02日時点の下記 URL を元に作成
    http://cwe.mitre.org/data/definitions/287.html


登録日 2011/04/21

最終更新日 2023/04/04