AAChartKit-Swift icon indicating copy to clipboard operation
AAChartKit-Swift copied to clipboard

InnerHTML的XSS攻击漏洞

Open ITzhao opened this issue 2 years ago • 5 comments

描述: DOM型XSS漏洞是基于文档对象模型(Document Object Model)的一种漏洞。它的攻击代码不需要服务器解析响应,而是通过浏览器端的DOM解析触发XSS。客户端上的JavaScript脚本可以访问浏览器的DOM并修改页面的内容,不依赖服务器的数据,直接从浏览器端获取数据并执行。在JavaScript中给DOM的innerHTML属性赋值一个

检测详情:

3.[文件]:/Frameworks/AAInfographics.framework/AAJSFiles.bundle/AAHighcharts.js
[代码]:setElementHTML=function(e,a){e.innerHTML="";a&&(new c(a)).addToDOM(e)};c.prototy
4.[文件]:/Frameworks/AAInfographics.framework/AAJSFiles.bundle/AAHighcharts.js
[代码]:t/html");else{var a=x("div");a.innerHTML=c;c={body:a}}var h=function(c,l){var e=
5.[文件]:/Frameworks/AAInfographics.framework/AAJSFiles.bundle/AAHighcharts.js
[代码]:ild(Q);p(b,"dir","ltr");-1===b.innerHTML.indexOf("xmlns")&&p(Q,"xmlns",this.SVG_
6.[文件]:/Frameworks/AAInfographics.framework/AAJSFiles.bundle/AAHighcharts.js
[代码]:th&&e(this.textWidth),r=[b,p,c.innerHTML,this.textWidth,this.textAlign].join(),F
7.[文件]:/Frameworks/AAInfographics.framework/AAJSFiles.bundle/AAHighcharts.js
[代码]:ighcharts-chart",this.index);e.innerHTML="";b.skipClone||e.offsetWidth||this.tem
8.[文件]:/Frameworks/AAInfographics.framework/AAJSFiles.bundle/AAHighcharts.js
[代码]:oy&&(a[b]=d.destroy())});c&&(c.innerHTML="",da(c),e&&W(c));T(a,function(b,d){del

解决方案: 开发者自查:如果需要通过innerhtml获取到的页面内容与远程服务器做内容过滤及转换,建议过滤掉非法字符。示例如下:私有静态字符串 htmlEncode(char c){开关(c){ case '&': return "&"; case '<': return "<"; case '>': return """"; case '"': return """; case ' ': return " "; default: return c + ""; }}

ITzhao avatar Jan 17 '24 07:01 ITzhao

请教下大神,等保检测结果怎么处理?

ITzhao avatar Jan 17 '24 07:01 ITzhao

我也遇到了,请问下解决了吗?

hkfuyy avatar Feb 02 '24 07:02 hkfuyy

试试将 AAChartKit-Swift 更新的到最新版本 9.0.0, 之前的版本依赖的 Highcharts 较旧, 更新到最新的应该能够解决问题.

AAChartModel avatar Feb 02 '24 08:02 AAChartModel

我全局搜索检查了一下, AAChartKit-Swift9.0.0版本中, 所依赖的最新版的 Highcharts, 以上高风险 JS 代码已被移除.

参考:

  • #359

AAChartModel avatar Feb 02 '24 08:02 AAChartModel

检测详情:/Payload/.app/Frameworks/AAInfographics.framework/AAJSFiles.bundle/AAHighcharts.js:k){g&&g!==d&&g.destroy&&g.destroy();delete b[k]})},discardElement:function(d){b||(b=w("div"));d&&b.appendChild(d);b.innerHTML=""},erase:function(b,d){for(var g=b.length;g--;)if(b[g]===d){b.s /Payload/.app/Frameworks/AAInfographics.framework/AAJSFiles.bundle/AAHighcharts.js:function(e){q(e,function(a,f){var h=!0;-1===c.allowedAttributes.indexOf(f)&&(h=!1);-1!==["background","dynsrc","href","lowsrc","src"].indexOf(f)&&(h=B(a)&&c.allowedReferences.some(function(c /Payload/.app/Frameworks/AAInfographics.framework/AAJSFiles.bundle/AAHighcharts.js:(new DOMParser).parseFromString(c,"text/html");else{var a=x("div");a.innerHTML=c;c={body:a}}var h=function(c,l){var e=c.nodeName.toLowerCase(),a={tagName:e};if("#text"===e){e=c.textContent|| /Payload/.app/Frameworks/AAInfographics.framework/AAJSFiles.bundle/AAHighcharts.js:function(a){this.container.className="highcharts-container "+(a||"")};a.prototype.getContainer=function(){var a=this.options,b=a.chart,d=ka(),c,e=this.renderTo;e||(this.renderTo=e=b.renderTo /Payload/***.app/Frameworks/AAInfographics.framework/AAJSFiles.bundle/AAHighcharts.js:d[g].destroy();"title subtitle chartBackground plotBackground plotBGImage plotBorder seriesGroup clipRect credits pointer rangeSelector legend resetZoomButton tooltip renderer".split(" ").fo

解决方案: 建议开发者自查:<w:br /gt;1. 使用textContent。<w:br /gt;2. 使用第三方过滤了危险字符的框架,来给DOM复制。例如jquery 的html()函数。

更新最新版本也能解决吗?

hkfuyy avatar Feb 02 '24 08:02 hkfuyy