
Эксплойт для CVE-2017-12945.
Уязвимость удалённого (аутентифицированного) слепого внедрения команд ОС существует в Mersive Solstice Pods — беспроводной платформе для совместной работы и презентаций, разработанной Mersive Technologies Inc. — работающих на версиях прошивки до 2.8.4, как подтверждено/сообщено на сайте вендора, см. скриншот ниже. В результате аутентифицированный злоумышленник может выполнять произвольные команды (с правами root) на уязвимых Mersive Solstice Pods, отправляя им специально созданные HTTP-запросы.

Эта уязвимость существует из-за отсутствия проверки входных данных/параметров на стороне сервера. Некоторые контролируемые пользователем входные данные/параметры напрямую передаются в качестве аргументов методу public static String runShellCommand(String command), предназначенному для выполнения команд ОС в контексте пользователя root. Эта небезопасная конфигурация позволила бы злоумышленнику полностью скомпрометировать уязвимые устройства.
Ссылка Mitre CVE:
Журнал изменений вендора:
Mersive Solstice Pods, работающие на версиях прошивки до 2.8.4.
com/mersive/solstice/server/EthernetInterface.java:static void SetPrefixLength(int prefixLength) {
int value = -1 << (32 - prefixLength);
try {
Log.d("Ethernet", "complete: " + ServerDisplay.runShellCommand("ifconfig eth0 netmask " + InetAddress.getByAddress(new byte[]{(byte) (value >>> 24), (byte) ((value >> 16) & 255), (byte) ((value >> 8) & 255), (byte) (value & 255)}).getHostAddress()));
} catch (Exception e) {
e.printStackTrace();
}
}
static void SetGateway(String gateway) {
if (!gateway.equals(GetGateway())) {
Log.d("Ethernet", "complete: " + ServerDisplay.runShellCommand("ip route del default"));
Log.d("Ethernet", "complete: " + ServerDisplay.runShellCommand("ip route add default via " + gateway + " dev " + ETH0));
}
}
static void SetStaticIP(String ipAddr) {
Log.d("Ethernet", "complete: " + ServerDisplay.runShellCommand("ifconfig eth0 " + ipAddr));
}
com/mersive/solstice/server/ServerDisplay.java:public static String runShellCommand(String command) {
return runShellCommand(command, true);
}
public static String runShellCommand(String command, boolean wait) {
Log.d("Shell Command", command);
try {
Process process = Runtime.getRuntime().exec("shell-tunnel --client");
DataOutputStream stdin = new DataOutputStream(process.getOutputStream());
InputStream is = process.getInputStream();
stdin.writeBytes(command + "\n");
stdin.flush();
stdin.writeBytes("exit\n");
stdin.flush();
if (wait) {
process.waitFor();
}
byte[] buffer = new byte[1024];
Arrays.fill(buffer, 0);
return new String(buffer, 0, is.read(buffer));
} catch (Exception e) {
e.printStackTrace();
return "";
}
}
Чтобы использовать эту уязвимость, аутентифицированный злоумышленник должен отправить специально созданный запрос на устройства, работающие на уязвимой версии прошивки (до 2.8.4). Этот запрос может быть отправлен либо непосредственно из веб-интерфейса устройства (из формы set static IP address), либо, альтернативно, с помощью утилиты командной строки, такой как cURL.
В любом случае, перед полезной нагрузкой должен стоять специальный символ, указывающий /bin/sh выполнить последовательные команды, например, символ ; или &, чтобы полезная нагрузка выполнилась после завершения исходной/легитимной команды.
Параметр staticIP, который является одним из нескольких уязвимых параметров наряду с параметром gateway, не проверяется на стороне сервера и вместо этого напрямую передаётся в качестве аргумента методу static void SetStaticIP(String ipAddr), который, в свою очередь, передаёт его как аргумент методу public static String runShellCommand(String command).
Эта конфигурация позволила бы аутентифицированному злоумышленнику выполнять произвольные команды на уязвимых устройствах в контексте пользователя root.
Copyright (C) 2019 Alexandre Teyar
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.