2011年9月15日、Node.jsの開発チームは安定版(stable)シリーズのアップデートとなるNode.js 0.4.12を公開しました。

今回のリリースは、セキュリティ上の重大な脆弱性への対応や、ネットワーク通信およびバッファ操作における不具合の修正を主目的としています。

2011年当時のインターネットセキュリティ環境の変化に即座に対応した、メンテナンスリリースとしての側面が強いバージョンです。

セキュリティの強化とDigiNotar CAの削除

今回のアップデートで最も優先度の高い変更点は、DigiNotarの認証局(CA)を信頼済みリストから削除したことです。

これは、DigiNotar社がハッキング被害を受け、不正なSSL証明書が発行された事件に対応するための世界的な措置に準じたものです。

この修正により、Node.jsを利用したSSL/TLS通信の安全性が確保されました。

また、querystringモジュールにおけるセキュリティホール(#1707)も修正されました。

これは hasOwnProperty の不適切な使用に起因するもので、外部からの入力によってオブジェクトの挙動が意図せず変更されるリスクを回避しています。

バッファとネットワーク処理の改善

プログラムの堅牢性を高めるために、低レイヤーの処理についても複数の修正が行われています。

バッファオーバーランの修正

binaryエンコーディングを使用する際、特定の条件下で発生していたバッファオーバーランの問題(#1624)が解消されました。

これにより、メモリ操作の安全性が向上し、予期せぬクラッシュを防ぐことができます。

ネットワーク通信の安定化

net.Socketにおけるエンコーディング指定のケースセンシティビティ(大文字・小文字の区別)の問題が修正され、開発者がより柔軟にコードを記述できるようになりました。

以下に、基本的なサーバー構築の例を示します。

JavaScript
const net = require('net');

// TCPサーバーの作成
const server = net.createServer((socket) => {
  // エンコーディングの指定(大文字・小文字が混在しても正しく認識されます)
  socket.setEncoding('utf8');
  
  socket.write('Node.js 0.4.12 server connection established.\n');
  
  socket.on('data', (data) => {
    console.log('Received data: ' + data);
  });
});

// ポート8124で待機
server.listen(8124, '127.0.0.1');
実行結果
Received data: Hello from Client

修正内容のまとめ

Node.js 0.4.12における主要な変更点を以下の表にまとめました。

カテゴリ内容関連番号
セキュリティDigiNotar CAを信頼済みリストから削除#1610
セキュリティquerystringのhasOwnProperty脆弱性を修正#1707
バッファbinaryエンコーディング時のオーバーランを修正#1624
HTTPマルチラインHTTPヘッダーのパースエラーを修正#1569
プロセスChildProcessのcustom_fdにおけるオーバーフロー修正#1563

まとめ

Node.js 0.4.12は、2011年当時のWeb標準に求められるセキュリティ要件を迅速に取り入れた重要なリリースでした。

特に認証局の信頼性問題への対応や、querystringbufferといった基幹モジュールの修正は、Node.jsが実用的なプラットフォームとして成長し続けるために不可欠な一歩でした。

開発者にとって、システムの安定稼働を支えるための知見が凝縮されたアップデート内容と言えるでしょう。