漏洞概要 关注数(24) 关注此漏洞
缺陷编号:wooyun-2015-0154775
漏洞标题:小米路由器过滤不严可root权限修改启动项开ssh
相关厂商:小米科技
漏洞作者: New4
提交时间:2015-11-21 18:34
修复时间:2015-12-17 14:48
公开时间:2015-12-17 14:48
漏洞类型:设计不当
危害等级:低
自评Rank:1
漏洞状态:厂商已经确认
漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]
Tags标签: 无
漏洞详情
披露状态:
2015-11-21: 细节已通知厂商并且等待厂商处理中
2015-11-24: 厂商已经确认,细节仅向厂商公开
2015-11-27: 细节向第三方安全合作伙伴开放(绿盟科技、唐朝安全巡航)
2016-01-18: 细节向核心白帽子及相关领域专家公开
2016-01-28: 细节向普通白帽子公开
2016-02-07: 细节向实习白帽子公开
2015-12-17: 细节向公众公开
简要描述:
小米路由器过滤不严可root权限修改启动项开ssh,攻击者通过绕过修改替换rc.local实现开启ssh获取路由器root控制权。
详细说明:
涉及文件:
r1d(2.8.16)\usr\lib\lua\luci\controller\service\datacenter.lua
r1d(2.8.16)\usr\sbin\thrifttunnel elf执行文件
THRIFT_TUNNEL_TO_DATACENTER = "thrifttunnel 0 '%s'"
entry({"api", "xqdatacenter", "request"}, call("tunnelRequest"), _(""), 301)
function tunnelRequest()
local XQCryptoUtil = require("xiaoqiang.util.XQCryptoUtil")
local payload = XQCryptoUtil.binaryBase64Enc(LuciHttp.formvalue("payload"))
local cmd = XQConfigs.THRIFT_TUNNEL_TO_DATACENTER % payload
local LuciUtil = require("luci.util")
LuciHttp.write(LuciUtil.exec(cmd))
end
function upload()
local fp
local log = require("xiaoqiang.XQLog")
local fs = require("luci.fs")
local tmpfile = "/userdisk/upload.tmp"
if fs.isfile(tmpfile) then
fs.unlink(tmpfile)
end
local filename
LuciHttp.setfilehandler(
function(meta, chunk, eof)
if not fp then
if meta and meta.name == "file" then
fp = io.open(tmpfile, "w")
filename = meta.file
filename = string.gsub(filename, "+", " ")
filename = string.gsub(filename, "%%(%x%x)",
function(h)
return string.char(tonumber(h, 16))
end)
filename = filename.gsub(filename, "\r\n", "\n")
end
end
if chunk then
fp:write(chunk)
end
if eof then
fp:close()
end
end
)
local path = LuciHttp.formvalue("target")
if string.match(path, "\/$") == nil then
path = path .. "/"
end
fs.mkdir(path, true)
local savename = filename
if fs.isfile(path .. savename) then
local basename = savename
local index = basename:match(".+()%.%w+$")
if index then
basename = basename:sub(1, index - 1)
end
local extension = savename:match(".+%.(%w+)$")
for i = 1, 100, 1 do
local tmpname = basename .. "(" .. i .. ")"
if extension then
tmpname = tmpname .. "." .. extension
end
if not fs.isfile(path .. tmpname) then
savename = tmpname
break
end
end
end
local dest = path .. savename
log.log(3, "dest=" .. dest)
fs.rename(tmpfile, dest)
local result = {}
result["code"] = 0
LuciHttp.write_json(result)
end
关键api函数,参数无过滤带入thrifttunnel 0 '%s'执行。 可实现文件复制及替换功能 详见exp。
漏洞证明:
通过:/api/xqdatacenter/request实现文件复制及替换备份。
在:/api/xqdatacenter/upload实现文件上传功能。
后通过/api/xqdatacenter/request,实现替换开机/etc/rc.local脚本实现命令间接执行。
导致攻击者获取ssh权限或实现木马植入。
确定影响版本:小米路由器(R1D)ROM 2.0 稳定版 版本2.8.16(10月16日更新)
其他版本未测试
修复方案:
web参数过滤或elf执行命令检查
版权声明:转载请注明来源 New4@乌云
漏洞回应
厂商回应:
危害等级:中
漏洞Rank:5
确认时间:2015-11-24 16:40
厂商回复:
需要管理员身份,漏洞利用有一定限制。感谢提交!
最新状态:
暂无