0x00 VmwarevCenter情報
vSphere
それはされてVMware
含まれ、仮想化プラットフォームキット導入ESXi
、vCenter Server
ソフトウェアのシリーズを。その中にvCenter Server
は ESXi
、データセンターvSphere
内のすべてのホストと仮想マシンを単一のコントロールポイントから均一に管理できるコントロールセンターがあります。これにより、IT
管理者は制御機能を向上させ、入力タスクを簡素化し、IT
環境管理の複雑さとコストを削減できます。
vSphere Client(HTML5)
vCenter Server
プラグインにはリモートでコードが実行される脆弱性があります。権限のない攻撃者は、慎重に作成された要求を開いている443
ポートを介しvCenter Server
てサーバーに送信し、それによってサーバーに書き込みを行い、webshell
最終的にリモートで任意のコードを実行させる可能性があります。
fofaクエリ
文法:
title="+ ID_VC_Welcome +"
app =” vmware-ESX” || app =” vmware-VirtualCenter” || app =” vmware-vCenter”
0x01影響を受けるバージョン
- 7.0U1cより前のバージョン7.0
- 6.7U3lより前のバージョン6.7
- 6.5U3nより前のバージョン6.5
0x02コード分析
vCenter Server
vROPS
プラグインはいるAPI
認証されていない、といくつかの敏感なインターフェイスがあります。 uploadova
インターフェイスは、OVAファイルをアップロードする機能を有しています。
@RequestMapping(
value = {"/uploadova"},
method = {RequestMethod.POST}
)
public void uploadOvaFile(@RequestParam(value = "uploadFile",required = true) CommonsMultipartFile uploadFile, HttpServletResponse response) throws Exception {
logger.info("Entering uploadOvaFile api");
int code = uploadFile.isEmpty() ? 400 : 200;
PrintWriter wr = null;
try {
if (code != 200) {
response.sendError(code, "Arguments Missing");
return;
}
wr = response.getWriter();
} catch (IOException var14) {
var14.printStackTrace();
logger.info("upload Ova Controller Ended With Error");
}
response.setStatus(code);
String returnStatus = "SUCCESS";
if (!uploadFile.isEmpty()) {
try {
logger.info("Downloading OVA file has been started");
logger.info("Size of the file received : " + uploadFile.getSize());
InputStream inputStream = uploadFile.getInputStream();
File dir = new File("/tmp/unicorn_ova_dir");
if (!dir.exists()) {
dir.mkdirs();
} else {
String[] entries = dir.list();
String[] var9 = entries;
int var10 = entries.length;
for(int var11 = 0; var11 < var10; ++var11) {
String entry = var9[var11];
File currentFile = new File(dir.getPath(), entry);
currentFile.delete();
}
logger.info("Successfully cleaned : /tmp/unicorn_ova_dir");
}
TarArchiveInputStream in = new TarArchiveInputStream(inputStream);
TarArchiveEntry entry = in.getNextTarEntry();
ArrayList result = new ArrayList();
while(entry != null) {
if (entry.isDirectory()) {
entry = in.getNextTarEntry();
} else {
File curfile = new File("/tmp/unicorn_ova_dir", entry.getName());
File parent = curfile.getParentFile();
if (!parent.exists()) {
parent.mkdirs();
}
OutputStream out = new FileOutputStream(curfile);
IOUtils.copy(in, out);
out.close();
result.add(entry.getName());
entry = in.getNextTarEntry();
}
}
in.close();
logger.info("Successfully deployed File at Location :/tmp/unicorn_ova_dir");
} catch (Exception var15) {
logger.error("Unable to upload OVA file :" + var15);
returnStatus = "FAILED";
}
}
wr.write(returnStatus);
wr.flush();
wr.close();
}
コードロジックはTAR
、ファイルを解凍してディレクトリにアップロードすること /tmp/unicorn_ova_dir
です。次のコードに注意してください。
while(entry != null) {
if (entry.isDirectory()) {
entry = in.getNextTarEntry();
} else {
File curfile = new File("/tmp/unicorn_ova_dir", entry.getName());
File parent = curfile.getParentFile();
if (!parent.exists()) {
parent.mkdirs();
TAR
ファイル名を直接連結してファイルに /tmp/unicorn_ova_dir
書き込みます。ファイル名が存在する場合、 ../
ディレクトリトラバーサルを実行できます。
0x03脆弱性の再発
使用コード(Sp4ce):https://github.com/NS-Sp4ce/CVE-2021-21972
0x04修理の提案
- vCenterServer7.0バージョンから7.0.U1cにアップグレードします
- vCenter Server6.7バージョンから6.7.U3lにアップグレードします
- vCenterServer6.5から6.5U3nにアップグレードします
次のことを示してください:Adminxeのブログ » [脆弱性の再現] VmwarevCenterはファイルRCEを許可しません