読者です 読者をやめる 読者になる 読者になる

らっちゃいブログ

日々の学びと気づきを発信するブログ

Apache HTTPDに認証なしでコンテンツにアクセスできてしまう脆弱性

速報 脆弱性 apache

Apacheにクライアント認証を設定していても認証なしでアクセスできてしまう脆弱性が見つかりました。

JVNVU#97485903: Apache HTTPD の HTTP/2 通信における X.509 クライアント証明書の認証処理の問題

影響を受けるバージョンは2.4.18 から 2.4.20 までになります。

これだけだと非常に影響範囲が広い事案となりますが、本件は HTTP/2 でのアクセスに限られるそうです。というわけで、影響するバージョンでHTTP/2とクライアント認証をご利用の方は最新バージョンにアップデートしましょう。

racchai.hatenablog.com

racchai.hatenablog.com

racchai.hatenablog.com

Nginx1.11.2がリリースされました

速報 nginx

変更点を見てみます。

https://nginx.org/en/CHANGES

*) 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 が異なる場合には利用中のポートを再度割り当てることで、エフェメラルポートを節約することができる機能のようです。

私自身はエフェメラルポートが枯渇するような状況には陥ったことはないですが、必要な人には必要な機能なのでしょうね。

racchai.hatenablog.com

racchai.hatenablog.com

racchai.hatenablog.com

libcurlに任意のコードを実行される脆弱性

速報 脆弱性

https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-4802

記事によると、SSPIまたは Telnet を使用してビルドされている場合に検索パスに関する脆弱性が複数存在するとのこと。この脆弱性を悪用することで、任意のコード実行が可能となるそうです。

影響を受けるバージョンは 7.49.1 未満になります。以下でパッチが公開されていますので、ご利用の方は忘れずに適用しましょう。

cURL - Windows DLL hijacking

racchai.hatenablog.com

racchai.hatenablog.com

racchai.hatenablog.com

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バイトに制限することでも回避することは可能みたいですね。アップデートするのが一番安全ではありますが、簡単に上げられないという方は設定変更で回避しましょう。

racchai.hatenablog.com

racchai.hatenablog.com

racchai.hatenablog.com

Error 'Table './mysql/proc' is marked as crashedが起きたときの対処についてメモ

mysql

windows のアップデートが走ってしまい、その際にMySQLが動作していた VM も道連れに死んでしまったためか、それ以降以下のエラーが出るようになってしまいました。バージョンは5.6です。

ERROR 145 (HY000): Table './mysql/proc' is marked as crashed and should be repaired

エラー内容を元に調べてみると、repairコマンドを使うと良いらしいことがわかったので試してみました。

database - Table './mysql/proc' is marked as crashed and should be repaired - Stack Overflow

mysql> repair table mysql.proc;
+------------+--------+----------+----------+
| Table      | Op     | Msg_type | Msg_text |
+------------+--------+----------+----------+
| mysql.proc | repair | status   | OK       |
+------------+--------+----------+----------+
1 row in set (0.00 sec)

一応これで現象自体は直ったわけですが、どういう状態になっていたのがどう直したのかがさっぱりわからず、もやもやしますね。

mysql.proc はプロシージャを管理するテーブルのはずなので、プロシージャを消してしまえばもう起きないということなら消してしまいたい衝動にかられています。

MicrosoftからMonacoエディタがリリースされました!

速報

VSCodeやTypeScript Playgroundで使われているエディタを部分的に切り出したものが、Monacoとしてリリースされました。

https://microsoft.github.io/monaco-editor/index.html

今回は npm module としての提供となっています。

なにがうれしいのか

百聞は一見に如かずです。こちらをご覧ください。

Monaco Editor Playground

これまではこういった開発ツールを作ったり、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 にアクセスすれば、このようにエディタが表示されるはずです。

f:id:racchai:20160621145656p:plain

まとめ

Atomが登場し、Eclipseクラウド上で動いたりと昨今のエディタは徐々にブラウザベースへ移行している印象ですが、いまいちデファクトとなるエディタが決まっていません。Monacoによって、このあたりに決着を付けるすばらしいエディタが開発されることを祈っています。

Qiitaがスライドモードをリリースしたみたいなので試してみた

速報

Qiita がマークダウンでスライドを作れるようにしてくれたらしいので、さっそく試してみました。

使い方

Qiita の記事作成画面にて、『スライドモード』にチェックを入れます。

f:id:racchai:20160621093150p:plain

あとは通常のマークダウンを書きつつ、--- を挿入してページ分割していくだけです。

直感的な仕様なので簡単に使い始められますね。

実際にスライドを作ってみる

こんな感じでマークダウンを書いてみました。

# らっちゃいブログ

* Python
* ポエム
* などなど

---

# コードも書くよ

 ```py
print 'Hello World!'
 ```

----

# おしまい ![profile.gif](https://qiita-image-store.s3.amazonaws.com/0/125245/15ab03b8-b4ec-00c3-e64e-a14ff580df93.gif)

http://racchai.hatenablog.com/

そして完成形がこちら。Qiita 記事の上部にスライドが表示されています。

スライドモードを試してみたよ - Qiita

f:id:racchai:20160621094926p:plain

発表時にはフルスクリーン化してしまえばいいので、楽ちんでいいですね。

ひとこと

これまでは github の gist に書いてそのまま表示したり js 当ててスライド形式に変換したりしていましたが、今後は Qiita で発表資料が作れてしまうわけですね。

今回のように限定公開にすれば、仲間内での勉強会などにも活躍しそうです。