Skip to content

Latest commit

 

History

History
123 lines (71 loc) · 11.2 KB

总结.md

File metadata and controls

123 lines (71 loc) · 11.2 KB

Chrome

CVE-2019-5826:IndexedDBDatabase中存在的一个iterator invalid漏洞,OnConnectionClosed函数在最后一个连接被erase时会发生非预期情况,导致原始指针未正确从database_map中删除,之后通过AbortTransactionsForDatabase函数使database_map中的原始指针变为悬垂指针,导致uaf产生。(有完整利用)。 (https://github.com/yytgravity/Daily-learning-record/tree/master/cve/CVE-2019-5826)

CVE-2020-15967:将原始指针spec_传递给了ServiceWorkerPaymentApp,PaymentRequestImpl在mojo发生连接错误断开时会被释放,之后使用ServiceWorkerPaymentApp中的spec_触发uaf(https://github.com/yytgravity/Daily-learning-record/tree/master/cve/CVE-2020-15967)

CVE-2020-15998:scoped_refptr指针可以通过std::move(handle)被释放,但是他并没清除handles中push的device_handle,当设备被拔出或移除时,就会调用handle->Close();触发uaf(https://github.com/yytgravity/Daily-learning-record/tree/master/cve/CVE-2020-15998)

CVE-2020-15990:注册KeyPressHandler时传入了AutofillPopupControllerImpl的原始指针,在remove child iframe将RenderFrameHost被释放后通过keyevent触发注册事件导致uaf(https://github.com/yytgravity/Daily-learning-record/tree/master/cve/CVE-2020-15990)

CVE-2019-5788:int整数溢出+unique_key的容器来制造悬空指针,之后在Truncate函数中使用悬空指针导致uaf(https://github.com/yytgravity/Daily-learning-record/tree/master/cve/CVE-2019-5788)

CVE-2020-6544:在迭代的过程中存在可以insert Hashmap的能力,导致Hashma重分配后迭代器失效,之后callback->Run将会使用已失效的指针导致uaf(https://github.com/yytgravity/Daily-learning-record/blob/master/cve/11.20-12.10/try/CVE-2020-6544.md)

CVE-2020-6550:Resolve可以重入到js层,在js中通过remove iframe断开mojo连接,使Impl被释放,之后在调用clear时,导致uaf(https://github.com/yytgravity/Daily-learning-record/blob/master/cve/11.20-12.10/try/CVE-2020-6550.md)

CVE-2020-6559:通过Resolve重入到js层,remove iframe释放RenderFrameHost,使得使用GetExecutionContext()返回的指针时uaf(https://github.com/yytgravity/Daily-learning-record/blob/master/cve/CVE-2020-6559/CVE-2020-6559.md)

CVE-2020-15996:在调用driver_中的虚函数时,没有检查driver_是否存在,driver_生命周期绑定renderframehost,可以通过remove iframe将driver_释放,之后调用driver_中的虚函数触发uaf(https://github.com/yytgravity/Daily-learning-record/tree/master/cve/CVE-2020-15996)

CVE-2020-16045:存在一个回调队列,该队列生命周期独立于RenderFrameHost,但是其中的回调函数与renderframehost绑定,在renderframehost被释放后通过回调队列调用函数导致uaf的产生。(https://github.com/yytgravity/Daily-learning-record/tree/master/cve/CVE-2020-16045)

Issue 1101509:RawClipboardHostImpl生命周期独立于RenderFrameHost,但它其中的方法使用了render_frame_host_,通过写一个拦截器在child iframe被remove掉后,remote端仍被parent持有,所以message pipe不会被中断,和其绑定的child iframe里对应的RawClipboardHostImpl也不会被析构,但此时RawClipboardHostImpl里保存的child iframe的render_frame_host_已经被析构掉了,之后调用方法使用render_frame_host_导致uaf(https://github.com/yytgravity/Daily-learning-record/tree/master/cve/Issue%201101509)

Issue 1122917:DirectSocketsServiceImpl没有继承自WebObserver等来观察renderframehost的生命周期,但在使用MakeSelfOwnedReceiver函数来创建一个self-owned的receiver时在DirectSocketsServiceImpl中存入了renderframehost。(https://github.com/yytgravity/Daily-learning-record/tree/master/cve/Issue%201122917)

CVE-2020-6573:在observer中保存了launched_device_的实际指针,但在launched_device_被reset时并未处理observer,导致observer中保留了失效指针,之后使用observer中保存的指针导致uaf(https://github.com/yytgravity/Daily-learning-record/tree/master/cve/CVE-2020-6573)

Issue 1119865:Resolve重入js,在then中再次调用StopProfiler,使得delete掉的指针再次被使用。(https://github.com/yytgravity/Daily-learning-record/tree/master/cve/Issue%201119865)

CVE-2019-13768:通过持有remote端回到js执行代码+被Unretained修饰的this指针,只由回调的调用者来保证回调执行时,this指针仍然可用。通过自定义getInternalUUID,将之前建立好的message pipe给断开,从而析构掉之前创建出的FileWriterImpl对象。这样再去调用DoWrite就会触发uaf。(https://github.com/yytgravity/Daily-learning-record/tree/master/cve/CVE-2019-13768)

ctf

Google2019_wp:https://github.com/yytgravity/Daily-learning-record/tree/master/ctf/Google%202019

plaid 2020 mojo:https://github.com/yytgravity/Daily-learning-record/tree/master/ctf/plaid%202020%20mojo

tctf-chrome(rce+sbx+fullchain):https://github.com/yytgravity/Daily-learning-record/tree/master/ctf/tctf-chrome

v8利用

CVE-2017-15401:通过调试partitionalloc,􏱫􏱎在无法leak object address的条件下通过􏱀􏲱􏱝Isolate完成利用(https://github.com/yytgravity/Daily-learning-record/tree/master/cve/CVE-2017-15401)

CVE-2018-17463: 由于冗余消除引发的漏洞,v8错误的设定CreateObject为kNoWrite,即不存在副作用,这将导致冗余消除优化掉多余的checkpoint,但实际上CreateObject会改变map类型,这就导致了类型混淆的产生。(https://github.com/yytgravity/Daily-learning-record/tree/master/cve/v8/CVE-2018-17463)

CVE-2019-5782:turbofan在定义kArgumentsLengthType时设置的最大值可以被用户所超出,导致可以通过构造消除掉checkbounds,实现数组越界(https://github.com/yytgravity/Daily-learning-record/tree/master/cve/CVE-2019-5782)

Issue 746946:当一个stable map的object只改变了elements的类型,而没有改变属性时,在缓存未命中时的优化将只会对当前优化的函数生效,最终导致类型混淆。(https://github.com/yytgravity/Daily-learning-record/tree/master/cve/issue%20746946)

CVE-2018-6065:在创建一个新的object时,很长的原型链会导致在计算所需的分配大小时触发整数溢出,使得instance_size变小导致object重叠(新的object分配时会根据map中的instance_size来计算下一个object的地址)。(https://github.com/yytgravity/Daily-learning-record/tree/master/cve/v8/CVE-2018-6065)

Issue 2013:(CVE-2019-13764 )在typer阶段的处理循环逻辑处,可以通过巧妙利用正负无穷来使得turbofan误将NAN判断为kInteger类型,之后通过将NAN代入运算伪造出实际长度远大于v8认为长度的array。(https://github.com/yytgravity/Daily-learning-record/tree/master/cve/v8/issue%202013)

CVE-2017-5070:类型混淆漏洞,通过fakeMap和fakeArray的方式完成利用(https://github.com/yytgravity/Daily-learning-record/tree/master/cve/CVE-2017-5070)

Issue 716044:Array.prototype.map引发的特殊的数组越界(https://github.com/yytgravity/Daily-learning-record/tree/master/cve/Issue%20716044)

CVE-2017-5116:存储在SharedArrayBuffer中的wasm可以利用web worker来实现条件竞争来修改wasm code。(https://github.com/yytgravity/Daily-learning-record/tree/master/cve/CVE-2017-5116)

issue 762874:turbofan在定义kStringLastIndexOf时设定的range,其最大值为kMaxLength - 1,当用户将kMaxLength带入运算可导致turbofan和实际的index range不同,从而消除checkbounds,达到数组越界。(https://github.com/yytgravity/Daily-learning-record/tree/master/cve/v8/issue%20762874)

N1CTF2020 Escape:一道逃逸分析的ctf题目(https://github.com/yytgravity/Daily-learning-record/tree/master/ctf/N1CTF2020%20Escape)

CVE-2017-5115:MergeFields在已经生成了Phi节点的情况下,后续在访问这个节点没有更新Phi节点的类型和取值范围(https://github.com/yytgravity/Daily-learning-record/tree/master/cve/v8/CVE-2017-5115)

issue-1195777:kword64结点在截断成int32的过程中,将会出现符号错误。

issue-1196683:ChangeInt32ToInt64函数中通过load_rep.IsSigned()来选择零扩展或者是符号位扩展时存在漏洞。

cve-2020-16040:kNumberLessThan在lower阶段,将会将满足判断的结点更新为Uint32,导致了丢失加法中的整数溢出。(补丁后仍有绕过方法)。

issue-1126249:CanOverflowSigned32函数由于忽略-0为操作数时可能触发int32溢出而导致了漏洞的产生。

issue-682194:由于 IterateElements 函数中,在调用 visit 之前提前保存了 length 至 fast_length。因此 callback 调用后,其复制的 length 仍然保持不变。所以会造成 OOB read。

issue-791245:由于写屏障消除产生的uaf漏洞(第一次接触v8的uaf漏洞学到很多)。

linux kernel

CVE-2019-9213:0地址解引用漏洞,cap_capable函数在检查权限时存在缺陷,在跨进程的条件下,只检测当前进程的权限,使得可以通过两个进程来绕过security_mmap_addr函数。(https://github.com/yytgravity/Daily-learning-record/blob/master/cve/cve-2019-9213/9213.md)

CVE-2019-8956:sctp_sendmsg函数中的链表遍历操作时,没有对列表项被删除的情况作出处理,导致列表项被删除后依旧使用它获取成员,这样造成了漏洞的产生。(https://github.com/yytgravity/Daily-learning-record/blob/master/cve/cve-2019-8956/8956.md) 利用9213和8956两个漏洞完成了完整利用。

cve-2016-4486:rtnl_fill_link_ifmap函数中没有对结构体初始化,该结构体大小为28字节,之后会因为编译器的对齐,而使四字节的内核信息泄漏。(https://github.com/yytgravity/Daily-learning-record/blob/master/cve/cve-2016-4486/paper.md)

调试复现了脏牛漏洞。

文件格式

1、通过学习DynamoRIO来初步理解插桩

2、学习AFL

3、通过(https://www.apriorit.com/dev-blog/640-qa-fuzzing-for-closed-source-windows-software )学习如何对闭源二进制文件进行文件格式fuzz,总结如下:

  • 找到我们想要fuzz的功能。
  • 逆向。
  • 编写一个调用上面逆向的API的程序(harness)。
  • 借助DynamoRIO查看覆盖率。
  • 重复上述过程,直到完全覆盖到了想要的fuzz的函数。

4、尝试过使用frida辅助harness的编写

5、gdi实战 学习资料:

我的gdi harness代码: https://github.com/yytgravity/Daily-learning-record/tree/master/FileFormat-fuzz/gdi

6、pbk实战 学习资料:

我的harness代码: https://github.com/yytgravity/Daily-learning-record/tree/master/FileFormat-fuzz/pbk 􏱋