Node Security Projectはこの数ヶ月間,Node.jsのセキュリティ向上に対して静かに取り組んでいる。Node.jsの既存モジュールベースの監査を通じて"Nodeの全般的状況を改善すると同時に,開発者と企業に対して,Node.jsの世界のセキュリティ状態に関する信頼性を提供する"ことがその目標だ。
今回の監査作業は,チケットシステムを通じて分散的な方法で実施される計画である。アドバイザリやイシュー管理,プルリクエストを行うバックボーンを提供することによって,Nodeコミュニティの支援を得ながらモジュール修正を行う考えだ。
Node.jsに関するセキュリティ上の大きな懸念のひとつは,サーバサイドJavaScriptインジェクション(SSJSインジェクション)の可能性に関するものです。これはクロスサイトJavaScriptインジェクションにも似ています。Adobeの研究員であるBryan Sullivan, Senior Security両氏が,SSJSインジェクションによって可能になる攻撃と,アプリないしデータが被るリスクを説明した資料を公開しています。
注意すべきなのは,サーバサイドJavaScriptインジェクション脆弱性の利用が,クロスサイトスクリプティングよりもSQLインジェクションの方に近いことだ。
折り返し型(refrected)XSSやDOMベースのXSSのように,中間犠牲者となるユーザに対してソーシャルエンジニアリングを仕掛ける必要はない。SSJSインジェクションでは,攻撃者は意図的に作成したHTTP要求を使って,直接アプリケーションを攻撃することができる。
セキュリティマニアを自称するブロガの\0/ bish \0/氏が書いているように,Node.jsには,開発者が特に注意を払うべき要素の組み合わせが存在している。ひとつは"いとも簡単にサーバサイドインジェクションに利用されてしまう"eval
の存在であり,もうひとつは"イベント駆動の単一スレッドプログラムモデル"であるが故に,"単純なエラーもでサービス拒否状態が作り出せてしまう"ことだ。さらに加えて,“安全のためには,暗黙のグローバル(implied globals)や"with”, “eval” のようなアンチパターンも避けるべきです”と氏は言う。氏はさらに,自身のブログ記事の中で,エクスプロイトにつながる可能性のある,これらの言語機能の誤った使い方をいくつか紹介している。
このように,Node.jsが他に比べて際立ってセキュリティの低いテクノロジなのではない。上に述べたような危険性は,どのサーバサイド言語にも広く存在している。Adam Baldwin氏がModulusのインタビューで語っているように,Nodeプラットフォームに影響するセキュリティ上の懸念に対する,開発者の意識の向上が問題なのだ。
Node Security Projectは,Nodeコミュニティにおけるセキュリティのアプローチ方法を変えるための活動です。セキュリティ思想の啓蒙を目指した努力と,コミュニティによって開発されたモジュールの監査を行って,その結果を公表します。