Apache HTTPDに認証なしでコンテンツにアクセスできてしまう脆弱性
Apacheにクライアント認証を設定していても認証なしでアクセスできてしまう脆弱性が見つかりました。
JVNVU#97485903: Apache HTTPD の HTTP/2 通信における X.509 クライアント証明書の認証処理の問題
影響を受けるバージョンは2.4.18 から 2.4.20 までになります。
これだけだと非常に影響範囲が広い事案となりますが、本件は HTTP/2 でのアクセスに限られるそうです。というわけで、影響するバージョンでHTTP/2とクライアント認証をご利用の方は最新バージョンにアップデートしましょう。
Nginx1.11.2がリリースされました
変更点を見てみます。
*) Change: now nginx always uses internal MD5 and SHA1 implementations; the --with-md5 and --with-sha1 configure options were canceled. *) Feature: variables support in the stream module. *) Feature: the ngx_stream_map_module. *) Feature: the ngx_stream_return_module. *) Feature: a port can be specified in the "proxy_bind", "fastcgi_bind", "memcached_bind", "scgi_bind", and "uwsgi_bind" directives. *) Feature: now nginx uses the IP_BIND_ADDRESS_NO_PORT socket option when available. *) Bugfix: a segmentation fault might occur in a worker process when using HTTP/2 and the "proxy_request_buffering" directive. *) Bugfix: the "Content-Length" request header line was always added to requests passed to backends, including requests without body, when using HTTP/2. *) Bugfix: "http request count is zero" alerts might appear in logs when using HTTP/2. *) Bugfix: unnecessary buffering might occur when using the "sub_filter" directive; the issue had appeared in 1.9.4.
stream モジュールと HTTP/2 関連の新機能とバグフィックスが目立ちますが、特段目立った変更はなさそうです。
あえて特筆するとすれば、IP_BIND_ADDRESS_NO_PORTオプションを指定することが可能になった点でしょうか。
NO_PORT と言っていますが、ポートを割り当てないという意味ではありません。ポートの割り当てタイミングをBIND時ではなく実際の接続時に変更するような動作となります。何がしたいかというと、dst ip が異なる場合には利用中のポートを再度割り当てることで、エフェメラルポートを節約することができる機能のようです。
私自身はエフェメラルポートが枯渇するような状況には陥ったことはないですが、必要な人には必要な機能なのでしょうね。
libcurlに任意のコードを実行される脆弱性
https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-4802
記事によると、SSPIまたは Telnet を使用してビルドされている場合に検索パスに関する脆弱性が複数存在するとのこと。この脆弱性を悪用することで、任意のコード実行が可能となるそうです。
影響を受けるバージョンは 7.49.1 未満になります。以下でパッチが公開されていますので、ご利用の方は忘れずに適用しましょう。
Apache Commons FileUploadにDoS脆弱性
IPA から Apache commons FileUpload のDoS脆弱性についての情報が公開されました。
JVN#89379547: Apache Commons FileUpload におけるサービス運用妨害 (DoS) の脆弱性
影響は以下の通りです。
- Commons FileUpload 1.3 から 1.3.1 まで
- Commons FileUpload 1.2 から 1.2.2 まで
- Tomcat 9.0.0.M1 から 9.0.0M6 まで
- Tomcat 8.5.0 から 8.5.2 まで
- Tomcat 8.0.0.RC1 から 8.0.35 まで
- Tomcat 7.0.0 から 7.0.69 まで
- Struts 2.5.1 およびそれ以前
上記に加え、現在ではもうサポート対象となっていない 1.0.x および 1.1.x も影響範囲とのことですので、すべてのバージョンが対象と思ってよさそうです。
ちなみに具体的な攻撃方法については何も記載がなく、マルチパートリクエスト処理の中に問題があるとのことです。
近年人気の Spring でも利用しているライブラリですので、影響する場合はアップデートしておきましょう。
Apache Httpd および Apache Tomcat は、それぞれ LimitRequestFileSize および maxHttpHeaderSize の設定により、HTTP リクエストヘッダの大きさを制限することが可能です。また、上限を 2048 バイトに設定することで本脆弱性の影響を受けないとしています。
とのことなので、HTTPヘッダーサイズを2048バイトに制限することでも回避することは可能みたいですね。アップデートするのが一番安全ではありますが、簡単に上げられないという方は設定変更で回避しましょう。
MicrosoftからMonacoエディタがリリースされました!
VSCodeやTypeScript Playgroundで使われているエディタを部分的に切り出したものが、Monacoとしてリリースされました。
https://microsoft.github.io/monaco-editor/index.html
今回は npm module としての提供となっています。
なにがうれしいのか
百聞は一見に如かずです。こちらをご覧ください。
これまではこういった開発ツールを作ったり、Atomのような独自のエディタを作る際には一から自分で作る必要がありましたが、今後は Monaco をベースに開発することが可能となります。
あくまでプログラムやマークアップを記述するためのものだと思いますので、ブログ記事を書いたりするようなリッチテキストエディタには向かないかもしれません。
Monaco の機能
VSCodeのエディタそのままなので機能を挙げていけばキリがないのですが、このあたりの機能が普通に使えます。
- IntelliSense
- 言語毎のシンタックスチェックおよび色付け
- テーマ切り替え
- 差分(diff)表示
ただし、シンタックスチェックの方はTypeScript, JavaScript, CSS, LESSの対応のみとなっています。
試してみる
せっかくなので手元で簡単に動かしてみようと思います。
インストール
まずはインストールから。npm モジュールなので、コマンド一発で入ります。
$ npm install monaco-editor
HTML作成
公式サイトとほぼ同じですが、index.html として以下を作成します。公式のものと違うのは、script のパスをnpmでインストールした位置に変更しています。
<!DOCTYPE html> <html> <head> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" > </head> <body> <div id="container" style="width:800px;height:600px;border:1px solid grey"></div> <script src="node_modules/monaco-editor/min/vs/loader.js"></script> <script> require.config({ paths: { 'vs': 'node_modules/monaco-editor/min/vs' }}); require(['vs/editor/editor.main'], function() { var editor = monaco.editor.create(document.getElementById('container'), { value: [ 'function x() {', '\tconsole.log("Hello world!");', '}' ].join('\n'), language: 'javascript' }); }); </script> </body> </html>
動作確認
Webサーバを設定するほどのものでもないので、python で簡易HTTPサーバを立ち上げて確認します。
$ python -m SimpleHTTPServer 8888
ブラウザで http://localhost:8888/index.html にアクセスすれば、このようにエディタが表示されるはずです。

まとめ
Atomが登場し、Eclipseがクラウド上で動いたりと昨今のエディタは徐々にブラウザベースへ移行している印象ですが、いまいちデファクトとなるエディタが決まっていません。Monacoによって、このあたりに決着を付けるすばらしいエディタが開発されることを祈っています。
Qiitaがスライドモードをリリースしたみたいなので試してみた
Qiita がマークダウンでスライドを作れるようにしてくれたらしいので、さっそく試してみました。
使い方
Qiita の記事作成画面にて、『スライドモード』にチェックを入れます。

あとは通常のマークダウンを書きつつ、--- を挿入してページ分割していくだけです。
直感的な仕様なので簡単に使い始められますね。
実際にスライドを作ってみる
こんな感じでマークダウンを書いてみました。
# らっちゃいブログ * Python * ポエム * などなど --- # コードも書くよ ```py print 'Hello World!' ``` ---- # おしまい  http://racchai.hatenablog.com/
そして完成形がこちら。Qiita 記事の上部にスライドが表示されています。

発表時にはフルスクリーン化してしまえばいいので、楽ちんでいいですね。
ひとこと
これまでは github の gist に書いてそのまま表示したり js 当ててスライド形式に変換したりしていましたが、今後は Qiita で発表資料が作れてしまうわけですね。
今回のように限定公開にすれば、仲間内での勉強会などにも活躍しそうです。
NginxにDoS攻撃が可能となる脆弱性!
朝起きたら脆弱性情報がメーリングリストにてアナウンスされていました。JSTだと本日(2016/6/1)の公開となります。
[nginx-announce] nginx security advisory (CVE-2016-4450)
A problem was identified in nginx code responsible for saving client request body to a temporary file. A specially crafted request might result in worker process crash due to a NULL pointer dereference while writing client request body to a temporary file (CVE-2016-4450).
これによると、リクエストボディを一時ファイルへ保存する際の処理に問題があり、ワーカープロセスがクラッシュしてしまうケースがあるそうです。具体的な攻撃方法については記載されていません。
この脆弱性の影響を受けるバージョンは、1.3.9 - 1.11.0 で、修正版として 1.11.1 と 1.10.1 がすでにリリース済みです。
一応変更内容も記載しておきます。
Changes with nginx 1.11.1 31 May 2016 *) Security: a segmentation fault might occur in a worker process while writing a specially crafted request body to a temporary file (CVE-2016-4450); the bug had appeared in 1.3.9.
1.11.1/1.10.1 にアップデートできない方は、バージョン毎にパッチが提供されていますので、自身で適用しましょう。
Patch for nginx 1.9.13 - 1.11.0 can be found here: http://nginx.org/download/patch.2016.write.txt Patch for older nginx versions (1.3.9 - 1.9.12): http://nginx.org/download/patch.2016.write2.txt