环境:android 4.4.2
漏洞扫描工具:360vulscanner_offical.apk 360透视镜
解决的漏洞:CVE-2015-6764 CVE-2016-1677 CVE-2016-3897 CVE-2016-2439
1.CVE-2015-6764
Google Chrome是美国谷歌(Google)公司开发的一款Web浏览器。Google V8是其中的一套开源JavaScript引擎。
Google Chrome 47.0.2526.73之前版本中使用的Google V8的JSON stringifier中的json-stringifier.h文件中的‘BasicJsonStringifier::SerializeJSArray’函数存在安全漏洞,该漏洞源于程序没有正确加载数组元素。远程攻击者可借助特制的JavaScript代码利用该漏洞造成拒绝服务(越边界数组访问)。
目前厂商已经发布了升级补丁以修复此安全问题,补丁获取链接:
http://googlechromereleases.blogspot.com/2015/12/stable-channel-update.html
diff --git a/external/chromium_org/v8/src/json-stringifier.h b/external/chromium_org/v8/src/json-stringifier.h
index ebfaf99..49377b1 100644
--- a/external/chromium_org/v8/src/json-stringifier.h
+++ b/external/chromium_org/v8/src/json-stringifier.h
@@ -138,7 +138,9 @@ class BasicJsonStringifier BASE_EMBEDDED {
INLINE(Result SerializeJSArray(Handle<JSArray> object));
INLINE(Result SerializeJSObject(Handle<JSObject> object));
- Result SerializeJSArraySlow(Handle<JSArray> object, int length);
+ //Result SerializeJSArraySlow(Handle<JSArray> object, int length);
+ //CVE-2015-6764
+ Result SerializeJSArraySlow(Handle<JSArray> object, uint32_t start, uint32_t length);
void SerializeString(Handle<String> object);
@@ -563,14 +565,24 @@ BasicJsonStringifier::Result BasicJsonStringifier::SerializeJSArray(
break;
}
case FAST_ELEMENTS: {
- Handle<FixedArray> elements(
- FixedArray::cast(object->elements()), isolate_);
+ //Handle<FixedArray> elements(
+ //FixedArray::cast(object->elements()), isolate_);
+ Handle<Object> old_length(object->length(), isolate_); //CVE-2015-6764
for (int i = 0; i < length; i++) {
+ //CVE-2015-6764
+ if (object->length() != *old_length
+ ||object->GetElementsKind() != FAST_ELEMENTS) {
+ Result result = SerializeJSArraySlow(object, i, length);
+ if (result != SUCCESS) return result;
+ break;
+ }
+
if (i > 0) Append(',');
- Result result =
- SerializeElement(isolate_,
- Handle<Object>(elements->get(i), isolate_),
- i);
+ Result result = SerializeElement(isolate_,
+ Handle<Object>(FixedArray::cast(object->elements())->get(i),
+ isolate_),
+ i);
+
if (result == SUCCESS) continue;
if (result == UNCHANGED) {
AppendAscii("null");
@@ -584,7 +596,7 @@ BasicJsonStringifier::Result BasicJsonStringifier::SerializeJSArray(
// They resemble the non-holey cases except that a prototype chain lookup
// is necessary for holes.
default: {
- Result result = SerializeJSArraySlow(object, length);
+ Result result = SerializeJSArraySlow(object, 0, length);
if (result != SUCCESS) return result;
break;
}
@@ -597,8 +609,8 @@ BasicJsonStringifier::Result BasicJsonStringifier::SerializeJSArray(
BasicJsonStringifier::Result BasicJsonStringifier::SerializeJSArraySlow(
- Handle<JSArray> object, int length) {
- for (int i = 0; i < length; i++) {
+ Handle<JSArray> object, uint32_t start, uint32_t length) {
+ for (uint32_t i = start; i < length; i++) {//CVE-2015-6764
if (i > 0) Append(',');
Handle<Object> element = Object::GetElement(object, i);
RETURN_IF_EMPTY_HANDLE_VALUE(isolate_, element, EXCEPTION);
2.CVE-2016-1677
Google Chrome是美国谷歌(Google)公司开发的一款Web浏览器。Google V8是其中的一套开源JavaScript引擎。
Google Chrome 51.0.2704.63之前的版本使用的Google V8 5.1.281.26之前版本中的uri.js文件存在安全漏洞,该漏洞源于程序使用错误的数组类型。远程攻击者可通过调用‘decodeURI’函数利用该漏洞获取敏感信息。
目前厂商已经发布了升级补丁以修复此安全问题,补丁获取链接:
https://source.android.com/security/bulletin/2016-05-01.html
diff --git a/external/chromium_org/v8/src/uri.js b/external/chromium_org/v8/src/uri.js
index 4e3f084..c6a1334 100644
--- a/external/chromium_org/v8/src/uri.js
+++ b/external/chromium_org/v8/src/uri.js
@@ -254,7 +254,8 @@ function Decode(uri, reserved) {
var n = 0;
while (((cc << ++n) & 0x80) != 0) { }
if (n == 1 || n > 4) throw new $URIError("URI malformed");
- var octets = new $Array(n);
+ //var octets = new $Array(n);
+ var octets = new InternalArray(n); // CVE-2016-1677
octets[0] = cc;
if (k + 3 * (n - 1) >= uriLength) throw new $URIError("URI malformed");
for (var i = 1; i < n; i++) {
3.CVE-2016-3897
Android是美国谷歌(Google)公司和开放手持设备联盟(简称OHA)共同开发的一套以Linux为基础的开源操作系统。Wi-Fi是其中的一个无线连接组件。
Android Wi-Fi中的net/wifi/WifiEnterpriseConfig.java文件中的WifiEnterpriseConfig类存在信息泄露漏洞,该漏洞源于toString方法调用的‘return'值包含密码。攻击者可借助特制的应用程序利用该漏洞获取敏感信息。以下版本受到影响:Android 4.4.4之前的4.x版本,5.0.2之前的5.0.x版本,5.1.1之前的5.1.x版本,2016-09-01之前的6.x版本。
目前厂商已经发布了升级补丁以修复此安全问题,补丁获取链接:
http://source.android.com/security/bulletin/2016-09-01.html
diff --git a/frameworks/base/wifi/java/android/net/wifi/WifiEnterpriseConfig.java b/frameworks/base/wifi/java/android/net/wifi/WifiEnterpriseConfig.java
index c7ebecb..a44aec6 100755
--- a/frameworks/base/wifi/java/android/net/wifi/WifiEnterpriseConfig.java
+++ b/frameworks/base/wifi/java/android/net/wifi/WifiEnterpriseConfig.java
@@ -837,6 +837,9 @@ public class WifiEnterpriseConfig implements Parcelable {
public String toString() {
StringBuffer sb = new StringBuffer();
for (String key : mFields.keySet()) {
+ // shanaibing add start,modify cve-2016-3897
+ if (PASSWORD_KEY.equals(key)) continue;
+ // shanaibing add end
sb.append(key).append(" ").append(mFields.get(key)).append("\n");
}
return sb.toString();
4.CVE-2016-2439
Android是美国谷歌(Google)公司和开放手持设备联盟(简称OHA)共同开发的一套以Linux为基础的开源操作系统。Bluetooth是其中的一个蓝牙组件。
Android的Bluetooth中的btif/src/btif_dm.c文件存在缓冲区溢出漏洞。远程攻击者可借助较长的PIN值利用该漏洞在配对期间执行任意代码。以下版本受到影响:Android 4.4.4之前版本,5.0.2之前版本,5.1.1之前版本,6.0之前版本,6.0.1之前版本。
目前厂商已经发布了升级补丁以修复此安全问题,补丁获取链接:
https://source.android.com/security/bulletin/2016-05-01.html
diff --git a/external/bluetooth/bluedroid/btif/src/btif_dm.c b/external/bluetooth/bluedroid/btif/src/btif_dm.c
index b2e80d3..d061479 100644
--- a/external/bluetooth/bluedroid/btif/src/btif_dm.c
+++ b/external/bluetooth/bluedroid/btif/src/btif_dm.c
@@ -1968,6 +1968,11 @@ bt_status_t btif_dm_remove_bond(const bt_bdaddr_t *bd_addr)
bt_status_t btif_dm_pin_reply( const bt_bdaddr_t *bd_addr, uint8_t accept,
uint8_t pin_len, bt_pin_code_t *pin_code)
{
+ // shanaibing add for cve-2016-2439
+ if (pin_code == NULL || pin_len > PIN_CODE_LEN)
+ return BT_STATUS_FAIL;
+ // shanaibing add end
+
BTIF_TRACE_EVENT2("%s: accept=%d", __FUNCTION__, accept);
#if (defined(BLE_INCLUDED) && (BLE_INCLUDED == TRUE))