クロヌズされた脆匱性を確認し、4぀の新しいCVEを取埗したす

脆匱性のクロヌズずそれらのクロヌズ方法に関する䞀連の蚘事を続けるように頌たれたした最初の蚘事はこちらで読むこずができたす 。 前回、メヌカヌが脆匱性のクロヌズに぀いお報告したずしおも、実際にはすべおがそうではない堎合があるこずがわかりたした。







遞択基準



今回考慮された脆匱性の遞択基準は同じでした今回は他のタむプの脆匱性を芋たかったこずを陀いお





私が遞んだものず方法



私はvulners.comにアクセスし、過去数週間ですべおの゚クスプロむトをexploit-db.comで衚瀺するように頌みたした。 今回のWebカテゎリでは、ほずんどすべおの゚クスプロむトはIhsan Sencanによっお䜜成されたしたが、サポヌトされおいない叀いアプリケヌションおよびプラグむンでのSQLむンゞェクションに最も頻繁に関連するため、それらを削陀したした。 残りの補品のうち、脆匱性CVE-2018-18924のあるProjeQtOrプロゞェクト管理ツヌル7.2.5のみが「攟棄されず、積極的に開発されおいる」カテゎリに分類されたした。

この脆匱性は、すべおの遞択基準を満たしたした。





ProjeQtOrプロゞェクト管理ツヌルに぀いお



゚クスプロむトの説明ずnist.govのCVEの説明を読むず、バヌゞョン7.2.5は蚱可されたナヌザヌに察しおのみ脆匱であるこずがわかりたす。 たた、.shtmlファむルを画像ずしおアップロヌドできたすが、 「このファむルは有効な画像ではありたせん」ずいう゚ラヌメッセヌゞが衚瀺されたすが、ファむルは匕き続きサヌバヌ䞊の画像に保存され、 ホスト/ファむル/の盎接リンクからアクセスできたすimages / image_name 。







盎接リンクを介したアクセシビリティヌは良奜ですが、ここでは、ファむルのダりンロヌドに䜿甚する名前を掚枬する必芁がありたす。 幞運であり、ランダムではありたせんが、珟圚の時刻から幎、月、日、時間、分、秒の圢匏で生成されたす。 結果は、20181114140320のような数字になりたす。その埌、ナヌザヌIDに続いお元のファむル名に䞋線が付きたす。 かなり倚くの未知数がありたす





繰り返しになりたすが、有効な画像をアップロヌドするず、これらのパラメヌタヌがすべお報告されたす。 リンクのいく぀かのオプションをさらに実行するこずは難しくありたせん数秒ありたすが、すぐにそれらに入るこずは困難です。







䞀般に、ファむル名の取埗は問題ではありたせん。 先に進みたす。 そしお、なぜPHPスクリプトをアップロヌドしないのでしょうか ダりンロヌドしようずするず、同じりィンドりがポップアップしたすが、ファむルはディレクトリに衚瀺されたせん。 コヌドを調べる時間です



スクリプトuploadImage.phpは、バヌゞョン7.2.5でサヌバヌに画像をアップロヌドする圹割を担っおおり、100〜117行目に関心がありたす。



if (substr($ext,0,3)=='php' or substr($ext,0,4)=='phtm') { if(@!getimagesize($uploadedFile['tmp_name'])) { $error=i18n('errorNotAnImage'); } else { traceHack("Try to upload php file as image in CKEditor"); } } else { if ( ! move_uploaded_file($uploadedFile['tmp_name'], $uploadfile)) { $error = htmlGetErrorMessage(i18n('errorUploadFile','hacking ?')); errorLog(i18n('errorUploadFile','hacking ?')); } } } if (!$error) { if(@!getimagesize($uploadfile)) { $error=i18n('errorNotAnImage'); } }
      
      





行100は、ファむル拡匵子の確認を担圓したす。phpたたはphtmの堎合、ファむルは砎棄され、保存されたせん。 したがっお、phpファむルは「files / images /」ディレクトリに衚瀺されたせん。 行115は、衚瀺される゚ラヌを䜜成したすが、ファむルには䜕もしたせん。



さお、゚クスプロむトに远い぀き、.shtmlファむルをアップロヌドしたしょう。 ここでは、少し䜙談をしお、.shtmlが䜕で、䜕が䞀緒に食べられるかを䌝える䟡倀がありたす。



SHTMLおよびSSI



りィキペディアの定矩



SSIサヌバヌ偎むンクルヌド-サヌバヌ偎のむンクルヌドは、個々のコンポヌネントからサヌバヌ䞊のWebペヌゞを動的に「アセンブリ」し、受信したHTMLドキュメントをクラむアントに配信するためのシンプルな蚀語です。 mod_includeモゞュヌルを䜿甚しおApache Webサヌバヌに実装されたす。 Webサヌバヌのデフォルト蚭定に含たれる機胜により、HTMLファむルを含めるこずができたす。したがっお、指瀺を䜿甚するには、ファむルの拡匵子が.shtml、.stm、たたは.shtmである必芁がありたす。



あなた自身の蚀葉で



SHTMLは、サヌバヌ偎の呜什セットを実行できるHTMLです。 䟿利な機胜のうち、サヌバヌ䞊で任意のコマンドを実行するexec関数がありたすはい、HTMLコヌドを䜿甚しおファむルをダりンロヌドしお実行できたす。



任意のコヌドを実行するサンプルコヌドを次に瀺したす。



 <!--#exec cmd=”ls” -->
      
      





幞いなこずに、この機胜はApache2サヌバヌではデフォルトで有効になっおいないため、有効にするにはタンバリンで螊る必芁がありたす。 構成を遞択しおから数時間で、環境倉数の戻り倀を機胜させるこずができたしたが、コマンドは機胜したせんでした。 これが私のSSIコヌドです。



 <html> <head> <title>thegeekstuff.com</title> </head> <body> <p> Today is <!--#echo var="DATE_LOCAL" --> <!--#exec cmd="ls" --> </p> </body> </html>  : Today is Wednesday, 14-Nov-2018 17:29:14 MSK [an error occurred while processing this directive]
      
      





誰かが蚭定で䜕を曞くべきかを教えお、それが正しく動䜜するようになったら、私はそれを読みたいです。



゚クスプロむトの脆匱性



星が収束したら、shtmlファむルをダりンロヌドしお、任意のコマンドを実行できたすたたは、私のように、サヌバヌの時刻を確認したす。



パッチを芋る



次のバヌゞョンは7.2.6ですが、私たちが興味を持っおいる脆匱性に関する倉曎はありたせんnist.govが再び欺かれたした。



バヌゞョン7.2.7を芋るず、すべおが修正されおいるようです開発者自身は、このバヌゞョンですべおが修正されたず蚀っおいたす。 2぀の重芁な倉曎点がありたす。



1.犁止されおいる拡匵機胜の䞭に、「shtm」が远加されたした最初の4文字がそのような堎合、shtmlもここに含たれたす。



 if (substr($ext,0,3)=='php' or substr($ext,0,4)=='phtm' or substr($ext,0,4)=='shtm') {
      
      







2.写真ではないファむルは削陀されたす。



  if(@!getimagesize($uploadfile)) { $error=i18n('errorNotAnImage'); kill($uploadfile); }
      
      





非画像は削陀され、shtmlは生き残ろうずしないので、分岐できるように思われたす。 しかし、圌らがブラックリストの問題を解決しようずした堎合、私はい぀もそれが奜きではなかった。 たずえば、䞀郚の囜では、䌁業は゜ヌシャルネットワヌクを犁止しおいたす。 これは、ナヌザヌ名ずパスワヌドが盗たれる゜ヌシャルネットワヌクの「ミラヌ」を䜿甚し始めるずいう事実に぀ながりたす。 それらのパスワヌドは䌁業のパスワヌドず䞀臎したすが、コヌヒヌを飲みながらむンスタグラムを芗き蟌む埓業員よりもはるかに倧きな問題が発生する可胜性がありたす。



Webプログラミングずそのセキュリティでは、ブラックリストも悪です。



ProjeQtOrからブラックリストをバむパスしたす



たあ、すべおが簡単です。 最初に、Apache2 + PHPがデフォルト蚭定で解釈できるファむルを芋おみたしょうすべおが曎新されたリポゞトリでubuntu 16.04にむンストヌルされたした。 「FilesMatch」ディレクティブは、ファむルを解釈する機胜を担圓したす。 コマンド "grep -r" <FilesMatch "/ etc / apache2"を䜿甚しお怜玢するず、結果は次のようになりたす。



 /etc/apache2/mods-available/php7.0.conf:<FilesMatch ".+\.ph(p[3457]?|t|tml)$"> /etc/apache2/mods-available/php7.0.conf:<FilesMatch ".+\.phps$"> /etc/apache2/mods-available/php7.0.conf:<FilesMatch "^\.ph(p[3457]?|t|tml|ps)$"> /etc/apache2/sites-available/default-ssl.conf: <FilesMatch "\.(cgi|shtml|phtml|php)$"> /etc/apache2/apache2.conf:<FilesMatch "^\.ht">
      
      





default-ssl.conf構成では、すべおの拡匵機胜が単玔にリストされおいたす;これらは、cgi、shtml、phtml、phpです。 残念ながら、cgi以倖はすべおProjeQtOrで陀倖されたす。



php7.0.conf configはさらに興味深いもので、拡匵機胜は正芏衚珟によっお蚭定されたす。 取埗するもの

延長 フィルタリングされるもの
php substr$ ext、0.3== 'php'
php3 substr$ ext、0.3== 'php'
php4 substr$ ext、0.3== 'php'
php5 substr$ ext、0.3== 'php'
php7 substr$ ext、0.3== 'php'
pht 䜕も
phtml3 substr$ ext、0.4== 'phtm'


玠晎らしい、フィルタリングされおいないファむル拡匵子が芋぀かりたした。 本圓に解釈されるこずを確認したす。



次の内容でtest.phtファむルを䜜成したす。



 <?php phpinfo();
      
      





ブラりザでこのファむルにアクセスし、むンストヌルされおいるphpに関する情報を確認したす。 驚くべきこずに、ブラックリストはバむパスされたしたが、デフォルト以倖の蚭定では、䜕らかの理由で、解釈のための他の拡匵が蚱可される可胜性がありたした。



ProjeQtOrプロゞェクト管理ツヌルにテストファむルをロヌドしたす。 もちろん、これは写真ではないため゚ラヌが発生したす7.2.7より前のバヌゞョンでは、phpinfoをコマンドの実行に倉曎するのは難しくないため、サヌバヌ䞊で既にコヌドが実行されおいたす。 バヌゞョン7.2.7では、ファむルは削陀され、コヌドは実行されたせん。



しかし、私たちは動揺せず、写真のチェックをバむパスしたす。



PHPの画像



ダりンロヌドしたファむルがProjeQtOrプロゞェクト管理ツヌルで画像であるかどうかを確認するには、getimagesize関数を䜿甚したす。この関数は、転送されたファむルのヘッダヌを単玔に調べたす。



phpファむルにゎミが存圚する可胜性があるずいう事実を利甚し、phpコヌドの解釈は文字「< 写真ずしお、゚ラヌりィンドりのスクリヌンショットを送信したす。 3行のPythonコヌドで完了です。



 data = open ('test.png','rb').read() data += open ('test.pht','rb').read() open ('new_pht_png.pht','wb').write(data)
      
      





おそらく、ファむルの先頭に有効な画像のタむトルを曞くだけでよいのですが、それは簡単で、さらに倚くの堎合、すべおのビュヌアで画像が衚瀺されたす。



この䜜成物をサヌバヌにアップロヌドするず、芋よ、それが読み蟌たれビュヌアヌに画像ずしお衚瀺されたす、このファむルがダりンロヌドされたずきのフルネヌムが衚瀺されるのもいいこずです。







ダりンロヌドしたファむルlocalhost / files / images / 20181114171730_1_new_pht_png.phtに移動し、ダりンロヌドした画像をテキストずしお衚瀺し、その䞋にあるphpinfo出力を確認したす。 phpinfoを単玔なWebシェルに眮き換えるこずは難しくないこずは明らかです。 たずえば、次のようになりたす。<Php system$ _ GET ['cmd'];







ファむルのダりンロヌドの遞択を開始したら、ゞョブを終了し、ブラックリストの有無にかかわらずファむルのダりンロヌドがある堎所を確認する必芁がありたす。



別のファむルのアップロヌド



最新の利甚可胜なバヌゞョンで芖聎したす。 以前ず同じ関数を䜿甚しおファむルをアップロヌドするず仮定するず、぀たり move_uploaded_file、プロゞェクトディレクトリ「grep -r」move_uploaded_file」./」で怜玢したす。 次の5぀のファむルを取埗したす。



./tool/uploadImage.php

./tool/saveDocumentVersion.php

./tool/uploadPlugin.php

./tool/import.php

./tool/saveAttachment.php



ファむルuploadImage.php-既に芋たした。

ファむルsaveDocumentVersion.php-ドキュメントのバヌゞョンをダりンロヌドしたす名前が瀺すずおり。 私たちはドキュメントをダりンロヌドしお芋ようずしおいたす最初は垞に画像をロヌドしたす。 ダりンロヌド埌、拡匵子.1がファむルに远加されおいるこずがわかりたす。 コヌドの名前の取埗方法を調べたすこれは229行目で行われたす。



 $uploadfile = $dv->getUploadFileName();
      
      





getUploadFileName関数は、DocumentVersionMain.phpファむルで宣蚀されおいたす。 227行目では、「。」が衚瀺され、返された名前にドキュメントIDが远加されおいたす。 远加されたポむントでさえ回避するこずはできたせん。



 return $uploaddir . $paramPathSeparator . $fileName . '.' . $this->id;
      
      





uploadPlugin.phpファむルは管理者のみがアクセスでき、プラグむンに䞍適切なコヌドが含たれおいる可胜性があるずいう事実は非垞に論理的であり、プラグむン怜蚌を入力せずに取り陀くこずは困難です䞀般的なCMSのように。 もちろん、そこに䜕かをダりンロヌドしようずするず、正垞にロヌドされ、実行されたす。



import.phpファむルは、管理者のみが利甚できたす。 ファむルをダりンロヌドするずき、csvファむルたたはxlsxファむルでなければならないこずが通知されたす。 もちろん、phpファむルをロヌドしようずするず゚ラヌが衚瀺されたす。



゚ラヌ-指定されたファむルタむプず遞択されたファむル圢匏が䞀臎したせん



むンポヌトが䞭止されたした



問題は、CVEの元のバグのように、ファむルは削陀されず、 localhost / files / attach / import / test.phpで利甚可胜なたたであるずいうこずです。



saveAttachmentファむルは、添付ファむルをロヌドするずきたずえば、独自のむメヌゞをロヌドするずきに䜿甚されたす。 次の圢匏の保護があるため、PHPスクリプトはそこでクロヌルしたせん。



 if (substr($ext,0,3)=='php' or substr($ext,0,4)=='phtm' or substr($ext,0,4)=='shtm') { $attachment→fileName.=".projeqtor";
      
      





拡匵子ファむルphp *、phtm *、shtm *が远加されたす。拡匵子「.projeqtor」が远加されたす。぀たり、明らかに、phtファむルはそこにクロヌルしたす写真をクロヌルしなくおも。 詊しおみお、アドレスlocalhost / files / attach / attachment_1 / test.phtですべおを取埗したす。



すぐに芋぀かった5぀のファむルアップロヌド堎所の最終結果





ProjeQtOrプロゞェクト管理ツヌルずCVE-2018-18924の結論







愛人メモ





開発者からの詳现な回答



開発者からの最初の答えは、「すべおを修正したので、修正されたコヌドを参照しおください」ずいうようなものでした。 いく぀かの問題がどこにあり、どのようにそれらが悪甚される可胜性があるのか​​を詳现にペむントする必芁がありたした。



その埌、圌は詳现な回答を受け取りたした。「問題がありたす。問題はバヌゞョン7.3.0で修正されたす。 ホワむトリストは、xlslxずcsvの䞡方の画像にも远加されたす。 たた、むンストヌル手順で、Webアクセスの倖に「添付」ディレクトリず「ドキュメント」ディレクトリを远加するこずを掚奚しおいるず曞いおいたす。



開発者は、CVEを登録し、曎新埌に蚘事を曞くこずを蚱可したした公開され、 ダりンロヌド可胜です。



おわりに



冒頭で曞いたように、CVEを決定するアップデヌトは非垞に倚くの人500以䞊のダりンロヌドによっおダりンロヌドされ、脆匱な゜フトりェアをアップデヌトするのはクヌルですが、゜フトりェアが脆匱なたたであるのは残念です。



その結果、4぀のCVEが私ず圓瀟に割り圓おられたしたCVE-2018-19307、CVE-2018-19308、CVE-2018-19309、CVE-2018-19310。



All Articles