热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

智能合约安全parity多重签名钱包安全漏洞

漏洞原因:因为initWallet函数是公开函数(publicfunction),攻击者调用initWallet,重新初始化钱包会把之前合

 

漏洞原因:

    因为initWallet函数是公开函数( public function) , 攻击者调用initWallet,重新初始化钱包会把之前合约钱包所有者覆盖, 即可改变钱包所有者。 

漏洞代码:

// constructor - just pass on the owner array to the multiowned and// the limit to daylimitfunction initWallet(address[] _owners, uint _required, uint _daylimit) {initDaylimit(_daylimit);initMultiowned(_owners, _required);}// constructor - stores initial daily limit and records the present day&#39;s index.function initDaylimit(uint _limit) {m_dailyLimit &#61; _limit;m_lastDay &#61; today();}// constructor is given number of sigs required to do protected "onlymanyowners" transactions// as well as the selection of addresses capable of confirming them.function initMultiowned(address[] _owners, uint _required) {m_numOwners &#61; _owners.length &#43; 1;m_owners[1] &#61; uint(msg.sender);m_ownerIndex[uint(msg.sender)] &#61; 1;for (uint i &#61; 0; i <_owners.length; &#43;&#43;i){m_owners[2 &#43; i] &#61; uint(_owners[i]);m_ownerIndex[uint(_owners[i])] &#61; 2 &#43; i;}m_required &#61; _required;}

修复方法&#xff1a;

设置 initMultiowned 和 initDaylimit 禁止外部调用&#xff0c;给initWallet添加only_uninitialized函数修改器&#xff0c;确保initWallt只被调用一次。

安全修复代码:

// throw unless the contract is not yet initialized.modifier only_uninitialized { if (m_numOwners > 0) throw; _; }// constructor - just pass on the owner array to the multiowned and// the limit to daylimitfunction initWallet(address[] _owners, uint _required, uint _daylimit) only_uninitialized {initDaylimit(_daylimit);initMultiowned(_owners, _required);}// constructor - stores initial daily limit and records the present day&#39;s index.function initDaylimit(uint _limit) internal {m_dailyLimit &#61; _limit;m_lastDay &#61; today();}// constructor is given number of sigs required to do protected "onlymanyowners" transactions// as well as the selection of addresses capable of confirming them.function initMultiowned(address[] _owners, uint _required) internal {m_numOwners &#61; _owners.length &#43; 1;m_owners[1] &#61; uint(msg.sender);m_ownerIndex[uint(msg.sender)] &#61; 1;for (uint i &#61; 0; i <_owners.length; &#43;&#43;i){m_owners[2 &#43; i] &#61; uint(_owners[i]);m_ownerIndex[uint(_owners[i])] &#61; 2 &#43; i;}m_required &#61; _required;}

POC

web3.eth.contract(MultiSigParityAbit).at(Vulnerable_Address).initWallet.getData([YOUR_ADDRESS], 1,2000000000000000000)

POC未测试&#xff0c;待测。

 

 REF:http://shellcode.se/programming/simple-mistake-leads-to-30m-usd-theft/

转:https://www.cnblogs.com/xiaoxiaoleo/p/7209752.html



推荐阅读
  • 本文将深入探讨 iOS 中的 Grand Central Dispatch (GCD),并介绍如何利用 GCD 进行高效多线程编程。如果你对线程的基本概念还不熟悉,建议先阅读相关基础资料。 ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 2018年9月21日,Destoon官方发布了安全更新,修复了一个由用户“索马里的海贼”报告的前端GETShell漏洞。该漏洞存在于20180827版本的某CMS中,攻击者可以通过构造特定的HTTP请求,利用该漏洞在服务器上执行任意代码,从而获得对系统的控制权。此次更新建议所有用户尽快升级至最新版本,以确保系统的安全性。 ... [详细]
  • 本文整理了一份基础的嵌入式Linux工程师笔试题,涵盖填空题、编程题和简答题,旨在帮助考生更好地准备考试。 ... [详细]
  • 自然语言处理(NLP)——LDA模型:对电商购物评论进行情感分析
    目录一、2020数学建模美赛C题简介需求评价内容提供数据二、解题思路三、LDA简介四、代码实现1.数据预处理1.1剔除无用信息1.1.1剔除掉不需要的列1.1.2找出无效评论并剔除 ... [详细]
  • Spring Data JdbcTemplate 入门指南
    本文将介绍如何使用 Spring JdbcTemplate 进行数据库操作,包括查询和插入数据。我们将通过一个学生表的示例来演示具体步骤。 ... [详细]
  • 本文介绍了如何利用HTTP隧道技术在受限网络环境中绕过IDS和防火墙等安全设备,实现RDP端口的暴力破解攻击。文章详细描述了部署过程、攻击实施及流量分析,旨在提升网络安全意识。 ... [详细]
  • 在 Axublog 1.1.0 版本的 `c_login.php` 文件中发现了一个严重的 SQL 注入漏洞。该漏洞允许攻击者通过操纵登录请求中的参数,注入恶意 SQL 代码,从而可能获取敏感信息或对数据库进行未授权操作。建议用户尽快更新到最新版本并采取相应的安全措施以防止潜在的风险。 ... [详细]
  • C++ 开发实战:实用技巧与经验分享
    C++ 开发实战:实用技巧与经验分享 ... [详细]
  • 使用Tkinter构建51Ape无损音乐爬虫UI
    本文介绍了如何使用Python的内置模块Tkinter来构建一个简单的用户界面,用于爬取51Ape网站上的无损音乐百度云链接。虽然Tkinter入门相对简单,但在实际开发过程中由于文档不足可能会带来一些不便。 ... [详细]
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • 在Ubuntu系统中安装Android SDK的详细步骤及解决“Failed to fetch URL https://dlssl.google.com/”错误的方法
    在Ubuntu 11.10 x64系统中安装Android SDK的详细步骤,包括配置环境变量和解决“Failed to fetch URL https://dlssl.google.com/”错误的方法。本文详细介绍了如何在该系统上顺利安装并配置Android SDK,确保开发环境的稳定性和高效性。此外,还提供了解决网络连接问题的实用技巧,帮助用户克服常见的安装障碍。 ... [详细]
  • QT框架中事件循环机制及事件分发类详解
    在QT框架中,QCoreApplication类作为事件循环的核心组件,为应用程序提供了基础的事件处理机制。该类继承自QObject,负责管理和调度各种事件,确保程序能够响应用户操作和其他系统事件。通过事件循环,QCoreApplication实现了高效的事件分发和处理,使得应用程序能够保持流畅的运行状态。此外,QCoreApplication还提供了多种方法和信号槽机制,方便开发者进行事件的定制和扩展。 ... [详细]
  • CTF竞赛中文件上传技巧与安全绕过方法深入解析
    CTF竞赛中文件上传技巧与安全绕过方法深入解析 ... [详细]
author-avatar
燕子yanzi068_476
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有