これは、CanonicalがUbuntu 12.04向けに提供したsudo 1.8.3p1パッケージ(下記URL)をベースに、CVE-2021-3156パッチを適用したカスタム版sudoです。
(これらのファイルをダウンロードして展開する最も簡単な方法は、Ubuntu 12.04を実行しているマシンで apt-get source sudo を使うことです。本番マシンをいじりたくない場合、この Vagrant イメージが私には役立ちました: https://app.vagrantup.com/hashicorp/boxes/precise64)
パッチ未適用版(1.8.3p1-1ubuntu3.7)がインストールされている場合、通常は次のように動作し、悪用される可能性のある脆弱性を示します:
vagrant@precise64:~/src$ sudoedit -s '\' `perl -e 'print "A" x 65536'`
Segmentation fault
パッチ適用版では、代わりに次のような出力になります:
vagrant@precise64:~/src$ sudoedit -s '\' `perl -e 'print "A" x 65536'`
usage: sudoedit [-AknS] [-C fd] [-D level] [-g groupname|#gid] [-p prompt] [-u user name|#uid] file ...
apt-get source sudocd sudo-1.8.3p1 を実行し、XenialパッケージのCVE-2021-3156パッチをすべて適用します。これらのパッケージを取得する最も簡単な方法は、Xenialボックスで apt-get source sudo を実行するか、Preciseボックスに一時的にXenialの apt-get パッケージソースを追加することです: deb-src http://security.ubuntu.com/ubuntu xenial-security main
patch -p1 < debian/patches/CVE-2021-3156-1.patch (9個中3個のハンクが失敗)patch -p1 < debian/patches/CVE-2021-3156-2.patch (存在しないファイルを参照)patch -p1 < debian/patches/CVE-2021-3156-3.patch (4個中1個のハンクが失敗)patch -p1 < debian/patches/CVE-2021-3156-4.patch (存在しないファイルを参照)patch -p1 < debian/patches/CVE-2021-3156-5.patch (1個中1個のハンクが失敗)plugins/sudoers 内のファイル)の修正を参照しています。このコードはそのバージョンには存在しないため、これらのパッチは今回のケースには適用できないと確信しています。$ sudo apt-get build-dep sudo
$ dpkg-buildpackage -rsudo -b
すべてがうまくいけば、親ディレクトリに sudo_1.8.3p1-1ubuntu3.8_amd64.deb と sudo-ldap_1.8.3p1-1ubuntu3.8_amd64.deb パッケージが作成されます。
このツリーに適用されたのはCVE-2021-3156パッチのみであることに注意してください。 以下のXenialパッチの一部または全部がこのツリーにも適用できる可能性は十分にあります。私は最初にそれらを適用しようとしましたが、きれいに適用できなかったため、このリポジトリには含めていません。このリポジトリが提供する sudo パッケージに重大なセキュリティ問題がないという保証は一切ありません。
これらのパッチのいずれかを適用するプルリクエストは 大歓迎 です! 便宜上、Xenialパッチの完全なセット(sudo 1.8.16-0ubuntu1.10 時点)がこのツリーの debian/patches にあります。このリポジトリのベースとなっているPrecise(12.04)パッケージソースには、CVE-2014-9680.patch までのすべてがすでに適用されていることに注意してください。すでに適用済みのパッチの完全なセットは .pc/applied-patches に一覧されています。
本ソフトウェアは「現状のまま」で提供され、明示または黙示を問わず、商品性、特定目的への適合性、および非侵害の保証を含む(ただしこれらに限定されない)いかなる保証もありません。いかなる場合も、著作者または著作権保持者は、本ソフトウェアから、または本ソフトウェアの使用またはその他の取引に起因して生じる、契約行為、不法行為、その他のいずれであれ、いかなる請求、損害、その他の責任も負いません。
.rej ファイルを確認して手動で変更を適用してください。これが難しい部分ですが、時にはそれほど難しくありません。パッチがきれいに適用されない理由は、通常、行番号が大きく異なる(パッチ対象の行は存在するが、パッチ対象ファイルの別のセクションにある)か、1.8.3p1コードベースではコードの見た目が異なるためです。このようなエラーも解決可能です。もう少し考えてコードを分析し、変更の適用方法を理解する必要があるだけです。