Hello everyone. Thank you for my introduction. I was so nervous before my first DevCon talk that I prepared 62 slides for this 20-minute talk. We will try to manage it. So, we'll talk about Prada Day Pollution Vulnerabilities in JavaScript. This talk is based on the joint work with Musart Balon and Chris Tycom. In this paper we study Prada Day Pollution Vulnerabilities and their gadgets and implemented the tools to detect them. I already presented part of this talk, the exploits that we detected in the real application and details of the gadget on Black Hat Asia. Today I want to present more details about our methodology about the tools. Let's start with some introduction in JavaScript and how inheritance work in JavaScript through an example. So, we run Node.js, which executes the code in index file. The first line of the code creates an empty JavaScript object. The runtime allocates a new object with a building property Prada that points to the object prototype. The object prototype has a bunch of functions that we can reuse, for example, to string. To implement inheritance, JavaScript allows to extend a prototype with a new property. In this example, we define the property X with value 42. Things get more interesting when we create some other object, in principle unrelated from the first one. Both objects share the same prototype. When the runtime executes the last line of the code to print X property for the second object, it tries to find prototype in the object itself. Since X is undefined for the second object, the runtime will look up the property X in the prototype. In this case, it prints 42 to the terminal. Well, let's consider the threat model of web applications to see how this feature can affect security properties of the application. Index.js file creates a simple web app that handles to request. Update and backup. The attacker and our threat model can send any request to the server, for example, update with any parameters. Let's see what happens when the parameters are in this figure. The code creates an empty object. It reads the proto property. And then the attacker adds the property shell with the value calc to object prototype. So, this code pattern is called prototype pollution vulnerability. But how can it affect our application? Let's assume that this code handles backup request. It just executes backup script by the helper function. Notice that the attacker cannot control any arguments of this helper function. In this function, we can give some options in terms of which shell you want to use. If we don't specify this option, it will use the default shell and then it will run a new process. If the attacker sends backup request after prototype pollution, we execute the function and options.shell reads the attacker-controlled property from the prototype and runs the calculator. So, we get remote code execution and these code fragments call it prototype pollution gadget. If we find gadget in the code of Node.js itself, the impact is much higher because it potentially affects all applications. In summary, to achieve remote code execution, we need two steps identifying prototype pollution and identifying gadgets. How to identify prototype pollution at scale? We implemented static analysis for Node.js applications and NPM packages. We used trained analysis where we marked the attacker-controlled data by the input label. However, we cannot define these things syntactically because not every property assignment leads to prototype pollution. Instead, we use what we call multi-label paint analysis to find this thing. Let's see how it looks at this example. We assume that all arguments of the function are attacker-controlled and mark them by input label. We propagate the input label and if we have a property read with the tainted property name, we change the prototype to proto. It means attacker can potentially read object prototype here. When the analysis detects the property assignment with a receiver that has a proto label like this one, it reports the code fragment as potential prototype pollution vulnerability. We used the main idea for our analysis. We implemented it based on the CodeQL analysis framework and evaluated our analysis on 100 vulnerable packages that we collected. The best result achieves 97% recall. It means we detected 97 vulnerabilities out of 100. So, which is necessary to find vulnerabilities in the real applications? The second question is how to identify the gadgets. We analyzed Node.js code and used dynamic analysis to detect property reads from object prototype. Then we used static analysis to find flows from these properties to internal Node.js function calls. You can find all details of this analysis in the paper. In presentation, I want to show some interesting results. So, we detected 11 different gadgets in Node.js APIs. The first gadget is spawn function, which executes new process. Let's look at this code. Details is not important here, but we see that the property shell and the property nth can be undefined. And there is a flow from these properties to the internal function call, which is actually vulnerable. It's simplified version of spawn function from Node.js API implementation. Let's see how remote code execution can be achieved. Suppose that the backup handler calls spawn with no attacker-controlled arguments. The attacker first pollutes the prototype by update request, as we saw earlier. They add property shell with value node to object prototype. The property nth by another request. And send backup request to execute spawn function. Let's see what happens. When spawn executes, it reads the value of the shell and nth from the prototype. It allows the attacker to run Node.js in debugging mode by controlling environment variables and connect remotely to execute arbitrary code. For this, we implemented the shell based on Node.js remote debugging protocol. You can see the short demo on the slide. The second gadget is the require function. The require function is used to include external packages to an application. So each application has a lot of require calls. This is simplified snippet of a require function. As we can see, it reads a package configuration file, package JSON, and evaluates the entry point, if this is defined in the property main. If main is undefined, Node.js uses default value. Let's see how we can exploit it if the attacker pollutes the main property. To exploit the gadget, we need to require a function call for a package without the main property defined. An example of such a gadget is bytes, one of the popular gadgets in NPM ecosystem. Let's see how it works when the attacker triggers this code to execute the require call. The attacker triggers the backup handler, which parses a config file of byte package. Since the main property is undefined, it looks up the property from the prototype. To achieve remote code execution, attacker should control this malicious file. As you can guess, this is a strong requirement that the attacker should be able to upload some malicious file to the system, for example, using some other vulnerability. Let's see how we can bypass this limitation by combining these two gadgets. The key idea is to use require a gadget to trigger the spawn gadget. To achieve this, we need to find the existing file that executes spawn function. If we identify a file in Node.js default distribution, then we increase the impact of the exploit, because every application uses Node.js, already have this file. An example of such a file is npm.js, which runs Node.instance. Let's look at the end-to-end exploit. The attacker pollutes the main property with a pass to npm.js, and the end property is required by spawn gadget. Finally, when backup is triggered, Node.js executes the require function loads npm.js that calls spawn function. The spawn function reads the attacker-controller environment variable from the prototype and runs Node.js in debugging mode as we saw earlier. So the attacker achieves remote code execution for a require call without additional requirements. The last question is how to exploit real application using or tools and detected gadgets. We covered the GitHub for Node.js applications and took 15 most popular ones. We ran our tool and got some prototype pollution cases. As you can see, the prototype pollution pattern is rare in practice, but manual verification is applicable for the total number of detected cases. We confirmed eight detected cases as exploitable and reported them to maintainers. You can see, we found two cases in npm-cli. Everyone, I think, used this up. Part server and rocket chat messenger. The main problem of real exploitation of this vulnerability to achieve remote code execution is that some code of the application can break your application if you pollute object prototype. So the code does not expect any additional properties in the object prototype. It happened many times in these experiments and I want to show one technique that you can use and that you can also apply for your research. Let's see a case for part server. We have a part server. It's a server that provides REST API out of the box and use some database. For example, MongoDB to store data from the request. It also uses JSB son. It's a library of the MongoDB and it can serialize and deserialize the data to binary MongoDB format. So we detected prototype pollution case in part server. This example of the code details is not interesting. It's not important. What's actually important for us that attacker can control name and the value of the polluted property. We also detected a gadget JSB son package and this gadget can be triggered when JSB son deserialize some data from the MongoDB. So this gadget call eval function for function string from the MongoDB that attacker can store to the MongoDB before but the problem that this eval call executed only if one option is enabled. As you can guess, it's disabled by default in the configuration file but it can be polluted and the gadget reaches from the polluted prototype and we can enable this feature in runtime. This is the main idea. So let's see on the naive way how we can exploit it. Attacker first send a package the package serialize it to the MongoDB, respond deserialize it and trigger prototype pollution. Good. We pollute the option that we need to trigger a gadget. After that the attacker send a package that should trigger a gadget but serializer of JSB son library throws an exception and application crashed. And any request after prototype pollution application crashed after the first request that we try to send. How we can bypass it? I found a way some kind of race condition. Let's see. If the attacker send the package that trigger remote code execution gadget first this package serialize it long time. At this moment the attacker send second gadget that should trigger prototype pollution vulnerability. It serialize it and deserialize it from the MongoDB and successfully trigger prototype pollution. After that MongoDB decided to stop handling the first request and pass it to the application and we trigger remote code execution. This technique I used many times usually you need very short time gap to trigger remote code execution gadget. One of the technique that I use I just send 20-50 requests to trigger remote code execution in one request that trigger prototype pollution in the middle. Most likely we get some situation that we trigger remote code execution exactly after prototype pollution and some threat. Let's see how it looks in practice. Some short demo. We are on par server. We need to implement a script to exploit this vulnerability because the second request we need to send in 100-300 milliseconds after the first one. So it's not possible to do manually. So this script prepared database to add some data to MongoDB to make it a little bit slowner to handle the first request for the long time and send these two requests. And you can see that we get calculator from the par server. So it works. So in conclusion we implemented and open-sourced tools to detect prototype pollution vulnerabilities in their gadget. Detected 11 new gadget in Node.js APIs. You also can find them in the GitHub app. Some gadgets already fix it but not all combination of that. And we reported a remote code execution vulnerabilities in the popular open-sourced applications. So the interesting question for the future work. One of that, what is the more efficient way to detect gadget? So we have options like a static analysis, dynamic analysis. We already used some hybrid approach. I think it's a good question for the future research. How many new gadgets are in NPM packages? We did not consider in these research NPM packages but it's also efficient way to detect it to explore it. Probably we can find some new ones. We continue researching this direction. If you are interested in this just follow me on the twitter. Thank you for your attention.


Wow, those are some phenomenal stories really inspiring This is an amazing day. So thank you all for being here and thank you for the organizers You know when they they called me up a few weeks ago or a few months ago and said hey, do you want to give an Edison talk I? Said sure sounds like fun. What's the topic and? They said it's departure. I Said what? Departure that's a topic and I started thinking about it and You know I started out by thinking this is the nothing space right? There's nothing in front of you That's a good beginning as we learned earlier. I Don't know anything about departure But then I started thinking you know I Depart almost every week to do my job to go somewhere in the world To talk to debate to discuss ideas. How did I get to this place? I departed from a career that everybody expected me to have that the world you know Imagine that I would have them my parents expected me to live up to and went on a path that is Completely different and by the way a great embarrassment to my parents If you've read Atlas Shrugged, you know why I left my country of origin. I was born in Israel I left my culture. I left my family. I've departed many many times during my life departure is a Part of my life But when did it all start? What is the origin of all these departures? There's a moment in time for all of us and you know here I'm talking primarily to the students here. There's a moment in time sometime between I don't know the ages of 14 and the ages of 25 Where those hormones kick in and suddenly the world opens up and Yes, there are all kinds of expectations from other people There are all kinds of demands that our culture has on us that our parents have on us that our family Everybody expects that our friends, you know, whether it's to join a gang do drugs be in a band Be an engineer be a doctor or lawyer as as as my parents expected for me But suddenly those hormones kick in and our minds open up and there's an incredible opportunity That we face as young people It's to shape our own lives It's to make decisions for ourselves. It's to truly become independent We leave the home and there's a certain level of independence involved in that You have to be financially independent. You have to start, you know making your own food and Cleaning your own clothes and taking care of yourself in a thousand different ways But there's a much more fundamental Issue at stake during these years when we're maturing into adulthood And that is the independence of mind Discovering our own mind Discovering who we are Discovering the ideas that are right for us discovering what we believe the truth to be And that might be what our parents have always told us It might be what the preachers have taught us Depending on what really I find it interesting that people who are born into a particular religion To the dying day believe that that is the true religion, right? The only reason they believe it's a true religion is because they were born into it If you're born into a different one you believe just as Between the age of 15 or 25, this is the period we're gonna challenge all that now Why do I cap it at 25 because the fact is that most of the adults here who are over 25 30 Don't change their mind about anything important ever Just the fact there's a certain calcification that happens in the mind particularly about fundamental questions But really important to issues We grow up with certain ideas Then there's a window where we can challenge them where we can become who we really are Well, we can make choices that are fresh that and you that are original to us that are independent And then whatever those choices are whether we chose to choose or chose just to continue on the path that our parents set for us That's what gets locked in for most of us not for everybody for the rest of our lives So this period is really really important Now for me, you know when I was growing up, I grew up in Israel and Israel I Those teen years were years were in the 70s and if you win Israel in the 70s Everybody pretty much had the same mindset You were an adamant collectivist Being an Israeli Being part of the Jewish tribe was everything was the most important thing in the world We grew up with songs describing the sacrifice of Soldiers and other Jews to make our lives possible life was about living for the tribe life was about living Sacrificing for the collective and I believed it. I bought into it a hundred percent. That was me You were brought up politically with socialism everybody was a socialist you didn't know anything else This was the reality So your life belonged to the group and the group got to make decisions which basically is socialism and I defend Who was spouting these kind of capitalist ideas? And I said to him one day. I said, what is this nonsense? That you're talking about what do you get this BS right and he handed me a copy of Atlas shrug I know they're adults in the audience and are freaking out because most of you probably hate Atlas shrugged Whether you've read it or not you probably hate Atlas shrug Right bit this book literally changed my life It taught me that my life does not belong to the group That my life is not to be sacrificed for the tribe That the tribe not is not the entity and replace tribe with your community with your country with your group any group that you want, right? Tribe is kind of deeply ingrained in us because we all kind of started a long time ago in tribes It taught me that my life was mine It was mine to be happy to pursue values to pursue my success to live my life as icy fit To think for myself not to accept necessarily what my parents when my culture what my political leaders when my teachers were telling me Not to reject it either But to think about it to evaluate it to examine it to use My mind to figure stuff out It taught me the value of using your mind Now why is it important? Why is the human mind so important? You know If you think about human beings all the people in this auditorium, it's hard for me to see you guys But I you know you're pretty normal right as a biological species We are pretty pathetic and if you don't believe me just look at your neighbor We're weak We're slow We have no claws We have no fangs, you know you try running down a bison and biting into it You try going up against a sabre to tiger We lose in the biological game out there We lose over and over and over again and yet we haven't lost here. We are we're incredibly successful Why is that? It's not because we have thumbs as some anthropologists would suggest It's because we have brains It's because we have reason it's because we have our mind Every value that we have is a consequence of somebody thinking Usually somebody thinking out of the box Somebody innovating somebody discovering something somebody using his reason using his mind and usually If it was a real revolutionary idea, what did the culture around him do to him? Burn him at the stake crucify him putting him at a house arrest The historical examples are numerous the real breakthroughs are not well tolerated You know, none of us here have the gene to make clothes Somebody had to figure that out and it's not easy you try cutting up an animal and turning it into Clothing or taking cotton and turning it into a jacket None of you know how to do this. I can guarantee that But some genius some were thousands of years ago figured it out Agriculture you guys have the gene for agriculture. They might be some farmers here but even then it's not a gene Somebody figured out that seed that dropped and grew into a shrub somebody figured out that the seed Was the cause of the plant and the watering the seed produced it that was the Einstein of his day probably crucified for that discovery and Then somebody had to take that discovery and turn it into an industry called agriculture Actually do the work that was the Bill Gates or Steve Jobs of his day The entrepreneur who turned it into profit-seeking and he was probably vilified forever for being greedy and thinking only of himself As we do to most of our very successful entrepreneurs. Okay. Okay successful entrepreneurs. We tolerate It's the real successful ones. We don't like but all of that all of that is a Consequence of the use of your mind of the use of reason That is our unique means of Surviving of thriving of achieving happiness of achieving success and what it means to be independent Really independent it means to use your mind now you can come to the same conclusions that your parents had You can decide that particular ideas are right and wrong and they might be They might conform to what's around you and they might not But you have to make that decision based on your reason based on your capacity to think It is your mind That is gonna guide your life for the rest of your life Use it use it. Well use it now and use these years Where there's this opening Where you're open to the world To challenge yourself We're all born in a particular culture a particular time with particular. I don't know let's say music. I Was born in the 70s best popular music ever Right rock and roll nothing better than that. Right. We all think that when we grew up we had the best music But that's just the music we grew up with There's music that goes back hundreds of years There's great music that has that comes from different cultures Go out and experience it live it Figure out what you like what you love. What's really good for you Make your life mission at 16 at 17 at 20 Make your life mission to discover the things that you are most passionate about And don't do it through whim. Don't do it through emotion Don't do it because other people tell it do it by using your mind by using your brain by using reason by using thinking Depart from the norm be unconventional but not unconventional in the sense of rejecting for the sake of rejecting But unconventional because you want to understand you want to figure out you want to discover the truth The truth that will lead you to the best life that you can lead for yourself Because that's at the end of the day What I discovered for my in man and what led to all my departures my departure from country from family you know and from Korea is That my life is mine Happiness is the goal. I have a great tool in my mind each one of us has a great tool to find our happiness to be successful to pursue life and It's that pursuit of life that pursuit of happiness Which is what? We are all about what we should be all about It's not about doing what other people want you to do. It's not about playing by the rules. It's not about Following your friends.  Being self-interested is hard work because it means thinking figuring out Dedicating your mind to figuring out what is really good for me for the rest of my life and The best time to start thinking about that is now and the best time during your life to start thinking about that is When you're young When you've got the energy when the world is opening up Go embrace it go have fun Be happy Pursue reason. Thank you all


Well, it's everybody JZ over jazby's case race calm this unlocked impeccable soccer patient number four This is a random number block for Arsenal Manchester City in Tottenham Random dumber block and they get every spot gets a random number for the break zero through nine And as an example if you get number three randomized to you, you'll get all team hits below or above these teams here With three being the first number next to the dash on the left side of the dash So for example of any of these three teams hit Arsenal Manchester City in Tottenham And it's a 243 out of 299 sure number hit that'll be yours for number three Thirsty out of 99 three out of 25 43 out of 49, etc. Etc. Number three will get that card Any all redemptions for these three teams hit in this break? We'll go to spot zero even if we know it's a one-on-one. It'll still go to spot zero And if there isn't if there is any unnumbered cards, it'll be around to my stupid customers So let's get a new dice roller You're the customer names on dress down to Robert and zero through nine Let's roll it and we got ourselves a two and a five or seven times one two three four five six and seven Robert down to John all right seven times here one two three four five six and seven Zero down to nine So Robert you have zero any all redemption for these teams Johnny have five Vic you have one any one of ones for these teams It'll be yours Robert with eight Sean with six Jameson with two Jack with seven Robert with four Andre so three and Johnny have nine So good. I'm an exit guys is the break itself Jatsby's case breaks.com


Welcome to the European Central Bank podcast bringing you insights into the world of economics and central banking. My name is Michael Steen and in this first episode we'll be taking a look at innovation and payments, cryptocurrencies, blockchain and the latest plans to create a global digital currency with Facebook's Libra. There's certainly a lot of interest around innovation and payments and so-called cryptocurrencies in particular have captured the imagination of many. The best-known one, Bitcoin, has been a trending topic over the last few years and the same can be said for blockchain which is the technology underlying most cryptocurrencies which has many potential uses from securing business transactions to voting systems and even music streaming systems. More recently media headlines have featured Facebook's plans to create its own global digital currency and the accompanying financial infrastructure known as Libra. So what is happening in digital payments and currencies and what is the role that the central bank plays? My first guest today is ECB executive board member Benoit Curray. He's been working closely on these topics as the chair of the G7 working group on stable coins. Benoit, hi let's start by taking a step back and think about what we're talking about. We're talking about digital money but what actually is money itself? The way an economist would answer your question is pointing out that money has three functions. A function has a unit of account that is you order a beer and the beer typically would be like three euros and that's a unit of account. But it's also a means of payment that is you're actually going to pay for the beer handing out the three euros and it's also a store value that is you will keep yours in case you want to be a tomorrow. Three functions and these three functions don't have to go all together and they can be performed by public money as well as private money or anything can be used for that purpose actually. So kids would use marbles or football cards as unit of account and even a store value and that's fine. Now the point is if you want to use it across a society widespread use of money and widespread trust in money, mutual trust in money in a group requires some political agreement, political understanding which is why now money is a public undertaking and is supported by laws, constitutions and is managed by central banks. So local use of money can be private. Public use of money across a society, across an economy nowadays is public underpin by laws and managed by independent institutions called central banks. And so that's to make sure that we will agree on what is this, that this is money. Exactly and because you want to trust money that will be given to you by people you don't know. That's the point. Anything is possible within a small group but when it's people you don't know then you need the rule of law to underpin confidence trust in the in the currency and that's why we have monetary law. That's why the role and mandate of the European Central Bank for instance is enshrined in a treaty which has been voted by the European people. Now that already gets into this field of the money we have today right now some of it the money in my bank account which is at the end of the day maybe just a number isn't physical is already virtual. So now we shift into this digital money area. What's changing there? What is new there? Why would you need to have if we already have money that's effectively virtual why is there that will this talk about cryptocurrencies and digital money? So what's new with the technology and you mentioned the blockchain which is the underlying technology for many of these cryptocurrencies. So I would say that the main driver for the use of cryptocurrencies has been convenience that is cost and speed. That is many cases and in particular for cross-border payments that is payments from one country to another they've proven cheaper and faster than existing means of payments based on existing currencies and that's something which is good which is useful and that should be kept used and protected. Now another driver of cryptocurrencies has been financial inclusion when you're posted in a foreign country you want to send the money back home to your family that's called a remittance and existing systems to transfer money has proven very expensive for these communities. So potentially these new technologies can also help support financial inclusion. So there's those two aspects but on the first one making it cheaper and so on that's that's because you're taking lots of players out of it because there's not a chain of banks in between the two transactions. It's partly so partly so because it's more direct it's these intermediated but it's also because the technology is better and less costly. So there seem to be huge opportunities there's a bit of skepticism as well and there's some risks and just before we go on I think we have a quick clip we can play of ECB president Mario Draghi who summed up some of these concerns at a press conference earlier in the summer. And these concerns if I can list them for you are concerns about cyber security AML money laundering terrorism financing use of these currencies for criminal purposes all this is linked also to the anonymity how would this how would this work at the same time concerns about privacy I mentioned cyber risk tax evasion monetary policy transmission financial stability and the global payment system how would this change the global payment system. So all these concerns are substantial they need to be addressed before the before the regulators can have a can have can look at this with genuine interest and positive interest. So Benoit we heard there from from president Draghi on some of the risks and can you talk a little bit more about the role that you see for central banks and global regulators in tackling these concerns and of course particularly your work that you've been doing at the G7. Well that was well summarized by president Draghi. On the one hand we don't want to stifle innovation so we want to look at what's good what's useful what's new what's cheaper what's faster in these new technologies so that they can benefit the public at large and that's something we're very positive about on the other hand we want to make sure that these new means of payments are safe meaning they should be safe for their users in terms in particular in terms of preserving the value of any money that's invested in these new means of payments. So we want to make sure that stable coins are stable and it really depends on on the integrity of how exactly the currency is or the coin is backed by assets or currency and we're looking into it so we want to make sure that they're really stable. First thing and second we want to make sure that they're safe for a society and they're safe for the economy meaning we want to make sure that they're not used for criminal purposes that the money laundering and financing terrorism dimension of it it is extremely important because we know from experience that new technologies are being used by criminals and are being used by terrorists so that's really a key priority for finance ministers and regulators across the world and we also want to make sure that they are not going to create financial instability and we want to make sure that they are not going to harm monetary sovereignty. Is that also then a concern in terms of who's behind it so is that I mean this private public kind of debate I mean if you take the Facebook example that's obviously a private company with backed by other private companies is there a reason that this should either fundamentally be a public sector or a private sector or is there a... In principle no I would say if it's properly regulated there are many examples of public goods that are provided by private companies and it's fine but you need good regulation and you need a lot of control by the government so that might end up being provided by private companies but under a very tight public control. All the conclusions might be that the hurdles are so high that we don't want the currencies to be run by private companies and I don't know that entirely depends on the answers that will be provided to our questions. And then the regulation is important that it's international because of course you don't want there to be some jurisdictions where there's a much lower level of regulation and then they end up going there. Absolutely because we're talking of technologies which spread across borders. We're talking of in many cases of technologies being provided by companies which are already global with a global basis of customers and we are talking of technologies where the main business case is about cross-border payments so it's by essence a global issue and we need consistency in the way these will be envisaged, approached and regulated which is why the G7 and now also the Financial Stability Board in Basel are looking into it. The governor of the Bank of England Mark Carney was at this year's Jackson Hole Economic Symposium and he gave a speech where he made what sounded like a radical proposal and he was talking about a global digital currency that's actually issued by a network of central banks like the Bank of England and ECB. He talked about this so-called synthetic hegemonic currency which sounds very impressive. What are your thoughts on this? Now the answers, the responses to cryptocurrencies and to stablecoins are not necessarily about issuing our own digital currencies. We might end up doing it but another response on our side is about improving the existing payment systems so that the needs that are evidenced by the whole discussion in the first place that is the demand for cheaper payments, the demand for faster payments can be met by traditional payment systems. So the whole discussion is a useful wake-up call for the central banking community and it makes us understand that we've got to be faster and we've got to step up upgrading of our payment systems. So the ECB has been doing it. We have a fast payment system tips, 24-7 payment systems which works very well. There might be other initiatives that we could take to make it more accessible in particular for cross-border payments. So the main gap I would see or the next frontier in terms of central banking activities would be to find efficient ways to connect our fast payment systems so that they can be used by citizens to transfer their expenses, to send money back home, to send money across borders so that cryptocurrencies will be less needed in the first place. Benoist, thank you very much and good luck with the work at the G7. Thank you for your interest. So having looked at the bigger picture surrounding these new payment innovations, we'd now like to go into a little bit more detail with our next guest, Maria Teresa Chimanti, ECB Market Infrastructure Expert. She's one of the ECB's leading experts on cryptocurrency and has recently co-authored research on what we call the crypto asset phenomenon. Maria Teresa, Bitcoin is actually one of the most searched for terms on our website. There's clearly a lot of hype about it, but we at the ECB actually refer to Bitcoin as a crypto asset rather than a cryptocurrency. Can you tell us why? Indeed, we think that terms like cryptocurrency are a misnomer. Instead, the ECB refers to Bitcoin and the likes as crypto assets. In the euro area, crypto assets are neither legally established as currencies, euro being the single currency of the euro area, nor are they legal tender. Also, currency are issued by trusted authorities. We demand to preserve the currency's stability. There is no such a framework in place for crypto assets. They've got this, they've also got this huge volatility, don't they, including that's one of the problems with Bitcoin. But I think there's another difference, which is also that what's backing the currency, right? Yeah, in our May 2019 report, we have pinned down the crypto asset phenomenon to the absence of an underlying claim or liability against an issuer. In other words, the value of crypto assets is imbeccable by anything or by anyone. Unsurprisingly, the valuation of crypto assets is very difficult and may be also subject to speculation. Therefore, the users of crypto assets are up against potentially very large losses in adverse market conditions. Also, if a crypto exchange or a custodian wallet provider is hacked or goes belly up, the customer's holdings will not be protected by the equivalent arrangements of a deposit guarantee scheme. As a matter of fact, the European Supervisory Authorities have issued many warnings to the users of crypto assets and the risks of buying crypto assets have been also touched upon by the authorities. So, that enter then at this point, Facebook, with their Libra initiative. Now, that's based on this thing that we touched on briefly with Benoit, but you can tell us a bit more about this notion of a stable coin. That's meant to address one of these weaknesses, if I understand correctly, yes? So, starting from Libra, Facebook's Libra is a whole new ballgame. Libra would be a stable coin backed by a reserve of assets and a payments infrastructure. Like crypto assets led by the coin, Libra also has an ambition to serve as a borderless currency. But this is where the similarities end with crypto assets and the differences begin. Unlike crypto assets, Libra will have a clearly identifiable issuer and a governing body, the Libra Association. The Libra Association is committed to managing the reserve assets as to preserve Libra's value over time and by doing so minimize price volatility relative to major currencies. Libra is also very different from current stable coin initiatives and arrangements. Stable coins are hardly used aside the crypto asset market. Libra, on the other hand, could go mainstream very quickly for starters. The resulting size or potential size of the Libra's network is large enough to trigger sweeping network effects on a worldwide scale. Of course. So, Facebook obviously has its huge scale here and it's an example of a stable coin. But also it's not the only kind of stable coin, right? A stable coin is not always backed by assets. Is that correct? Indeed. Stable coin is a phenomenon under development. Currently, there is no common view or a great definition of what is a stable coin. We define stable coin as digital units of value that are not a form of any specific currencies or basket of currencies and rely on a set of stabilization tools to minimize fluctuations in their price relative to a currency. Stable coins can also be further distinguished on the basis of what underpins their value. Stable coins can be backed by funds. Stable coins can be backed by traditional asset classes such as government bonds or by commodities. Stable coins can also be backed by crypto assets or they can be based exclusively on the perception on the expectations by users that their holdings will maintain a stable value. Is there more work that we're doing on this, given that it's such a new and sounds like it changing phenomenon? We are the first central bank to publish research on stable coin covering the taxonomy and the use cases. This work obviously lays the foundation for more work, especially when it comes to the analysis of the potential implication of stable coins for the payment system, as well as for the Euro system mandate and tasks. We obviously don't have all of the answers. In fact, stable coin also have a cross border dimension to them, which requires that we collaborate with other authorities around the world. And this is why the ECB works with their peers in international fora to address the most pressing questions and issues raised by stable coins. Now, a key aspect that we haven't covered in depth yet is the technology that makes these things possible. Bitcoin, Libra and other new projects have one thing in common. They're based on a technological innovation known as blockchain. We at the ECB have been studying this new technology quite carefully, particularly in what we call our innovation lab. And our next guest, Dick Bullman, leads a team at the ECB that looks into innovations and payments. So, Dick, welcome. Can you tell us a bit about what blockchain actually is? Blockchain is an infrastructure. It's a road, so to speak, and crypto assets and stable coins, they are the cars that use these roads. So if you want to move a crypto car from person A to person B, you use blockchain as a road. So this would be an explanation I would offer, but then you might ask, okay, good blockchain as a road, but what is special about the blockchain road? If you want to transfer money today from A to B, you can do that. You can pay in a shop, buy online, make an electronic transfer to a friend. This works without problems. The roads are there. But what makes blockchain interesting, I would even say fascinating to many people, is the underlying idea of having a much simpler road network. In today's world, if I want to transfer money to you, it goes via my bank, maybe an intermediary bank, it goes via payment system to your bank before you eventually get the money. So in particular, if it's a cross border transfer, if you assume your transfer, I don't know, from here to the States or to Asia in particular, you have many correspondence in between. It's a very complex arrangement. So the blockchain has this vision. The blockchain has the vision of working without intermediaries. That means you don't need to go via intermediary A, B and C. The road is direct. So today, if I transfer some money to you and we don't know each other, we both know that's going to work because we trust our banks and we know we're going through the banking system. Potentially in the future, using blockchain technology in this example, the idea is that the technology itself has that trust embedded, so we know that it's going to work even if we've never met each other. That's the vision that drives the blockchain idea. We touched a bit on regulation already with Benoit Currie. What are the things they are holding back, this change at the moment? What are the blocks at the moment to the blockchain, if you will? From the central bank perspective, we see that blockchain is relatively new technology still. Let's face this. It's in its infancy. I mean, there are still teasing troubles. I think I know a bit about this because we have at the innovation, we have at the ECB at this innovation lab, where we experiment with the technology. We here do analysis within the family of European Central Banks, within the community, where we internally analyze and experiment with this technology. We also work together with Bank of Japan. We have established a project, Stellar. In this framework, we do experiments. We ask ourselves the questions, whether a blockchain could meet efficiency and safety requirements of existing payment systems, whether it's cheaper, whether it's faster, whether it can process more transactions than our current infrastructures. From today's perspective, the answer is no, it cannot. Why not? Just because it's still too new, it needs to develop more, needs to be more efficient. Because you would not use a new technology if it could do just the same job that is currently done with the existing and with maybe more traditional technologies. So, from this perspective, we don't see that blockchain can do something better, but what we see is that there's a lot happening, that the progress in the blockchain space is really huge. So, and if this continues, I think it would just be a question of time and that blockchain may be then one day, but here, I mean, crystal ball gazing is not my thing. Of course, of course. But if I, you know, as a reader of newspapers and so on, you know, you see everything, people saying Bitcoin is terrible for the environment because it uses loads of energy, you're driving a bit of the idea that fine, but these kind of technologies can advance and at some point it will be quicker and cheaper, maybe than legacy technologies. They do, they do. It's the moment you spotted a problem, you can be assured that someone out there is already on it. You mentioned, and this is an interesting thing with the energy consumption. I said we have this innovation lab at the ECB and we recently got a call someone external, I think it was a journalist wanted to know, okay, how high is the energy consumption in our innovation lab? Because they are the concerned about use of blockchain and so on. But yes, the Bitcoin blockchain is really energy consuming because it uses a specific mechanism of finding consensus within the network on the information that is there put on the blockchain. So this makes it energy consuming, but we see that there are other ways of finding consensus and there is a plethora of possibilities and they are far less energy consuming. But people are mainly looking still surprisingly, I must say at the Bitcoin blockchain, it is slow, it cannot really, it's not really scalable, but yet maybe this applies to the first generation Bitcoin blockchain, but if you look at other blockchain or distributed ledger protocols, as we prefer to call them out there, you see that they are scalable and they are efficient and they are far less energy consuming compared to the Bitcoin blockchain. So these problems are in the process of being fixed. Okay, so it's a crucial thing for the central bank also to know about, but it sounds like it's not ready for deployment at the moment, certainly from our point of view. For us, no, it's not ready for prime time. We have to think twice before we move to a new technology and we can easily implement this in a small environment, but if we do it in an application which is really crucial for the functioning of the financial sector and risks, difficulties, problems could really trigger financial stability problems, then we need to make sure that this won't happen and this is why we need to carefully look at these technologies. And then in the wider innovation and payments area, there is already something we're offering now, right? This instant payments service, the tips that we have, which actually is using classical, if you will, technology. It's not blockchain, but it is very fast and can provide people with the ability to transfer money instantly. Tell me a little bit about that, if you could. Yes. So, tips went live in November 2018. So, we always develop our systems according to technological innovation and user needs. And you see there's a clear user need towards instant. If you want to exchange information, if you want to download music, if you want to stream a movie, everything has to happen in the blink of an eye. You want it, you get it. But of course, also the payment infrastructure has to be fit for purpose then and we have to make sure that we offer them also a service that could offer this. And in this context, we developed and implemented our tips service, the target instant payment settlement service. Yes, we can process transactions in the fraction of a second. We can also process very, it's cheap for each transaction costs only a fraction of a Euro cent. So, it's very, it's very efficient and it's very cheap and it doesn't, it doesn't rely on blockchain technology. As a bank customer though, if I want to use that, that's what is dependent on my bank using it. So, I should write to my bank and ask him, are you using tips? Yes, that's correct. Excellent. Okay, thank you, Dirk. That brings us pretty much to the end of this episode. It's clear that crypto assets and innovations and payments are a rapidly developing field. And we, these be clearly closely involved. We'll probably come back to this topic for another podcast later on. But for now, I'd like to thank Dick Bulman, Maria Teresa Chiementi and Benoit Carré for guiding us through this fascinating world of crypto assets and innovations. Do also look in the show notes for links to relevant papers and publications from the ECB on these topics. You've been listening to the European Central Bank podcast with Michael Steen. If you like what you've heard, please do subscribe wherever you got this podcast from and leave us a review. Until next time, thanks for listening.


I'm Ryan and I'm Allie. After falling in love, we decided to ride bikes across America, collecting love advice along the way. This is Love Cycles. No flatties, no laddies, no cruddies. Coming from a rag-brie world at 6.20 in the morning and people have been up for well over an hour, which makes sleeping in hard but also motivating to get up and start moving. Luckily the weather is great. So let's have another beautiful day, uh, rag-brion. Whoa, what is this? Oh, hey. Look at that shirt. Where'd you get that? Oh, no big deal. My friend Dante traded it for my shirt that was falling apart and look at this far superior piece of craftsmanship I got. January 15th, 2017. I was uh, I was in the doctor's office. Something was going out of my heart and the doctor told me, he was like, listen, if you're done and I was like, what do you mean I'm done?   I was 544 pounds and I developed AFIP. So now it rived me in my heartbeat and I left there that day and I started a diet and I set goals for myself and I lost 44 pounds in the first month and 74 pounds by the end of the second month. And then I started swimming for a little while but then I got on a bike and I started riding. And that's where I found you on on YouTube because I was just constantly YouTubeing different stuff, trying to learn about it and just your positive nature and how positive you were about everything. And I realized like I developed kind of a funk where I was real pessimist and I was constantly really negative and I thought, I need to be like that guy. I need to constantly just be smiling and happy and learn how to be that kind of excited and I think a big part of it has to do with the fact that you ride a bike everywhere and you're just you're more in touch with I mean the world with life. And so I decided I was going to live a less car-centric life and I stopped driving. We owned two cars. Everybody was like, dude, what happened to your car? I was like, no, I got a car but I got to lose this weight. So combined with a very strict diet and a whole lot of bike riding, I rode everywhere from that point forward. I never drove a car unless I was taking my wife somewhere or taking something bigger than I could take on a bike which was very seldom because you know, I had bikes with big racks and everything. So I was 245 pounds in 16 months. I've been in a process across the last year training to be here at Rag Brigh. And so I did the first day yesterday. I'm doing pretty good. I'm taking off today. Everything seems to be going great. And I'm just trying to take it one day at a time, man. That is awesome. And I'm so excited to bump into you. That is so cool. Oh my man, here we go. Oh, this is so cool. What a great moment. You have no idea how much of an inspiration you've been to me in all of this for real, man. That means a lot to me. That's real because like you I seriously like all I all I want is to be able to get to the point that I could smile and look as happy as you are. And I showed my wife, you guys, his videos about the two of you traveling across country because I want I'm trying to encourage my wife to get into this with me. And we just had a baby. I mean, that's a huge part of all this for me because my baby like here, I'll show you a picture, man. Yeah, let's do it. I don't want to get to a point where like when I'm 45 or 50 or something, they're like, I can't do this kind of stuff with her. I want to be able to take on these adventures and go do cool stuff with her. And you know, I have this dream that someday maybe me and my wife be able to go on bike trips.  And then eventually there's my kid riding right alongside me. And hopefully my kid never knows what it's like to be obese. I was morbidly obese and a big part of it was because we just growing up like, you know, my parents encouraged us to go outside and play and everything, but I just was never really an active child. And so I want to try to encourage my daughter to be as active as possible and get out and see the world and just do cool stuff. Go on some adventures. Your story is incredible. I appreciate it, man. Yeah, really incredible.  Well, hey, you're an inspiration to me and best of luck with everything. I gotta get a photo with both of you because my wife's not going to believe this. It is so nice and cool today. It's actually raining on us, which is pleasant. It's the perfect temperature. And if that big old fat midwestern rain, which isn't that cold, it's just nice and it's cool. It's refreshing. How's the new shirt?  And this morning I feel I'm really looking good. I love your bike. That is awesome. Looking good, boys. Thanks. First stop of the day, Manning. They've been advertising everything from pie to cinnamon rolls to ice cream, pancakes, everything.  I'm hungry. Do you have the best pie in town? Yes, we do. I think Allie's going to eat a little bit of gluten. Get some pancakes. Where has it? These nice people are doing this free will. You just give us suggested donation. That is pretty cool. This is an amazing moment for Allie. She has her own plate of pancakes. She's been very jealous of my pancake eating the entire ride. And now she's doing it. I want to say some words about being gluten free. I don't eat gluten because 99% of the time my life is better if I don't eat gluten. But then there's that 1% of the time where life is better when you do eat gluten. And this is that 1% of the time.  It's totally going to be worth it. Cheers. I really enjoy the vibe of all the stops at Raghbri. Everybody just kind of takes over the little town parks and takes naps and plays in the playgrounds and it's just fun. It's hard to explain. I know I keep saying it a lot, but this is just a really fun event. Everybody is just smiling and having a good time. This is a Scotcheroo. It is a peanut butter and rice crispy chocolate concoction. And it's actually not too sweet. I'm pretty sure this is one of the more nutritious things I've eaten in this Raghbri. It's always hard to get moving after eating so much. It's going to look like Hollywood movie sets. They're perfect. We are in line to get a piece of corn and they're taking us through this interactive. It's kind of like a museum teaching us all about Iowa corn. And it's interesting. 99% of the corn we see is not for eating. Not for us to eat anyway. Livestock eat it. Or it goes to ethanol. And to our left we have an advertisement for GMOs. You're not going to see that in Boulder. The corn in this area will not fit in those. That is incredible. Not even close. And do you guys grow corn year-round? No, it's only a summer crop. I mean I imagine America is pretty reliant upon Iowa for corn. The number one producer of corn, number one producer of soybeans, hogs, eggs. In all the United States. Yeah. Wow. Ethanol, number one producer of ethanol, number three in beef. And 96% of that is family farms? Yes. So preserving that way of life is really important. It's very important. It's difficult. Especially people in my generation. Being on the farm was a tough, tough proposition. And so a lot of farms, we lost a lot of farmers. A lot of these family members went off to find their work and other more stable jobs. Like I still work on the family farm. But I'm a teacher on the side. And then I help out at events like this. And so a lot of people have to do that. But then also technology came along and allowed our parents to farm longer into lives. So my parents are personally farming into their 70s. Who grows the sweet corn? Like small families or who grows? Yeah, there's a variety of people. In Iowa, sweet corn is less than 1% of our corn crop. And so we have a lot of families that will raise sweet corn and sell locally at stands and stuff like that. Commercially growing sweet corn is less in Iowa. Usually, commercially growing sweet corn is in some other states where they have a lot of times it's irrigated because they crop. There's a few years laying down there. There you go. Some of my favorite summertime memories are eating corn from the garden. It's even more delicious. I'm having chatted with one of the farmers who grows it. Who is this dude? This is our new friend Kevin. We just met him here at Ragnbrock. Some love advice for us. Been married one year. Just a year. June 3rd was one year. Yeah. And my best advice so far has been intentionality. Just love is never going to stay the same and it shouldn't stay the same, right? It should be dynamic. But in order for it to change, you have to intentionally change. Every single day, try to love your partner as best as you can. That's been my best advice so far and marriage has been the best decision I've ever made in my life. Love you, Jess. I had a picture of who my wife would be, but one day I was just praying and I kept feeling it was actually in Paris. She dropped me off in Chicago and I just took a flight to Paris because I've been studying French for a really long time. I just wanted to go there. I've never been there. And every single night in Paris, I just kept thinking of her.  Honestly, I don't know, sometimes when you submit yourself to God there, the stuff that you get back is better than you could have ever imagined or planned or tried to create for yourself. Because he is in your hand, he has your life in his hands and he knows what's best for you and I think if you just follow that, life is going to be amazing. So she didn't fit that idea that you had, like you had this picture in your hand with the right and where do you think you got that original idea? I don't know, honestly. That original idea probably just came from what we've seen in social media, what society has considered beautiful or sexy and all that. And there's so much more than just physical beauty. It's ridiculous how many more levels there are besides just what we see physically. And the physicality, right, it just, over time it wanes and someone changes the way they look with just that haircut or, you know, if you start working out for a year. But yeah, what's inside and if you work, exactly, right? You got to get used to wrinkles. That's all I'm saying. And everything's sagging. I'm both man and a baby. That's all I'm saying. Yeah, so my experience with Raghbhai has been amazing. The people are easily the best part and best reason to come back year after year. But it's also fun stopping in all these little towns that otherwise would not get any sort of traffic.  You start to just see what really matters and that's just people. This machine behind me might sound loud and obnoxious, but it produces some of the best ice cream in the world, Beekman's Ice Cream. And when you hear that sound from far off in the cornfields, you know you got an ice cream stuff coming. What's so amazing about this ice cream? It's homemade by the Beekman. It's my family. 2,000 years later. We made it! Yeah!  Oh, we got the ice cream. Now we're gonna go find an ice-shaded spot and eat it. There's not a lot of shading on there, so sometimes you have to get creative. And right now we're gonna hang out under this big tractor. What do you think, Allie? It's cool, creamy, and delicious. These machines are freaking huge. We're almost at Jefferson and we saw a bunch of bikers just loading up into this tractor. We're like, we want to go wherever that tractor's going, so we don't even know where we're going. Apple dumplings with fresh ice cream from the orchard. How is it? It's delicious. Better than pie. This orchard is also like a fun house. There's lots of fun things to do, like jumping on this giant bouncy mat. Come on, Allie! Okay, that's enough. I don't want to throw a pie on this thing. Now it's time for the spooky corn maze. One eternity later. We made it out, which is a good thing, because it is really hot in there. We are in Jefferson, in the backyard of Beverly and Glen. We have not met them yet, but they're supposed to be a really, really nice little couple. What's the trick? How did you guys do it? I don't think we ever thought anything other. Well, when you get married, we didn't. Nowadays, it seems like they kind of think, if it doesn't work, why? I don't think we ever thought that. I mean, we loved each other. We got married. We had arguments, yeah. But I don't know. I guess it just all worked out. Hopefully, we set a good example for our kids. Cheryl is the oldest, and then two years later, we had Dennis, and then two years later, Linda, or 18 months. And then 14 months later, Gary, and then 13 months later, David. Were those all planned? No. I never saw my parents argue. I'm sure they did, but not in front of weak kids. That was a no-no, and I don't think we did either. What was it about her that you saw that you decided this is the woman? No. Well, probably because she just lived down the road to the corner and a half mile up the road. Because she's right. I didn't have dates in high school when we had our high school dances. You know, I was one of those guys, you know, along the sideline that just stood there and watched. You know, I don't think you ever thought I didn't in terms of fall in love. We just know how much we liked each other, how we wanted to always be together, and it gets to the point where you don't want to be apart. She was a good, you were a good tractor driver and all those kind of things. Is that why you picked me? Because dad raised me as his son?


Welcome to the early morning shift. Thanks, everybody, for showing up. For the half of you that are not hungover, I hope you enjoy the talk. For the half of you that are hungover, we're going to try to talk really, really softly so we don't hurt your head. This is abusing Adobe Reader's JavaScript APIs. We've got a lot to cover, so we're going to start going right away. A quick agenda of what we're going to be doing. We're going to introduce ourselves, talk about ourselves for about 45 minutes, and then we'll go over the content last five minutes. It'll be great. So we've been doing a lot of research in Adobe Reader over the last six months, trying to understand the attack surface. And what we're going to show you guys today is an overview of a part of the attack surface that most people do not know about and what you can do with it. We're going to talk about how you can go find these vulnerabilities yourselves. And then we're going to talk about how you put it all together, chain the various bugs that you need and the APIs that you need to gain remote code execution on Adobe Reader. So first we'll introduce ourselves. My name is Brian Gorenz. I'm the manager of vulnerability research inside of HP Security Research Organization. I run a program called the Zero Day Initiative, which is the world's largest and one of the oldest vendor agnostic bug bounty programs. We're entering our 10th year of buying vulnerabilities and buying exploits, and we spent over $10 million on bugs over these last years. We do a lot, I work with researchers around the world to procure vulnerabilities, root cause vulnerabilities, and send them to vendors to get them fixed. Sometimes they fix them, sometimes they don't, and we have a long history of making sure everybody's aware of the vulnerabilities that we purchase. I also organized the ever-popular Pondone hacking competition, which this last year gave away almost a million dollars for exploits against the hardest attack surfaces out there in the industry. We had one individual win $250,000 for a set of three exploits this year. I got to work with Jayzl and Abdul back here, along with several members of my team working on the Adobe Research Project that we were doing, and I'll let them introduce themselves. Hello. I'm Abdul. I'm a security researcher working for the zero-day initiative program. Been working for the ZDI for a little bit more than three years. I do a lot of food cause analysis, bug hunting, and exploit development. And recently I have been operating Reader in a regime of high memory pressure. Jayzl. I'm Jayzl, and I prefer to go by wandering glitch. I also work at ZDI, spend a fair amount of time on root-causing vulnerabilities, and then using what I learned to augment my own vulnerability discovery and exploit development. And I use Python assembly to prevent people from operating in regimes of high memory pressure. In case that doesn't make any sense, you should check out the ZDI Black Hat talk. Yes, we've done a lot of research over the past year as well in Internet Explorer, so that's a good paper to read. So we also do a lot of research, and you can see here on the slides some of that research that we've done. These are all of the bugs we've discovered in Adobe Reader since we started this research back in December 2014. Like I said, we do a lot of internal research. We started researching it back about six, seven months ago just to kind of get an understanding of how it worked. We've discovered what, it's about 91 vulnerabilities. In fact, we found, or at least Abdul found one on the plane. So we'll be submitting that. True story, true story. It really covers a whole spectrum of vulnerabilities that exist in the product itself. But the majorities of these CVEs and ZDI cans that you see on the slide are what we call JavaScript API restriction bypasses. So we'll kind of go into detail about what that is and how they occur and what you can do with them. So before we get started, we kind of want to call out some prior research that if you are going to spend a lot of time looking at JavaScript APIs and what you can do with them, we recommend. First is a set of research done by Molnar back in 2014. And he was really the first researcher to highlight the issue of the JavaScript restriction bypasses. And he kind of goes into detail about how all of it works. And he provides you a proof of concept that will allow you to bypass the restrictions that we'll talk about. And then disclose information on a box. So he could read files off of a computer and send them out to a server using this restriction bypass. And it really is required reading, in my opinion, to get started in this research. And hopefully our paper will also be required reading when it's done. There was also a presentation released by MWR Labs where they asked the question, why bother basically auditing popular software? And that's a good question. Most of the researchers out there kind of are scared to go after some of these bigger pieces of software thinking that all the low hanging fruit is gone. But as you can see from the previous slide, you can find a lot of bugs if you start looking at the software and kind of reading the research that's out there. And they kind of provided a really nice overview of the attack surface and all the attack vectors that are available. And Adobe Reader also highlighted the JavaScript restriction bypass bugs. So this research, like I said, started in December 2014. And the reason we started because honestly we were not getting a lot of Adobe Reader bugs and we knew that they were being used. So we wanted to kind of get a better understanding of what existed in this product and how it could be leveraged. And we basically hit every type of bug that, you know, every, well, probably every CWE that exists, right? We took a varied approach when doing this auditing. First we started out writing a bunch of fuzzers, trying to find memory corruption bugs used after freeze. We followed that up with binary analysis of the shared memory sections. We really released a blog recently about a privilege escalation that existed in the shared memory region. Then we did some code analysis on the JavaScript APIs that you'll see in a second. And we kind of trained each other internally trying to find as many bugs as possible with the main goal of trying to kill off as much as possible. Because we do purchase bugs and so, you know, the more that we kill, the better it is for us, money-wise. But, you know, internal discoveries we found basically every type. Use after freeze memory leaks or, yeah, memory leaks use after freeze privilege escalations, logic bugs, sandbox, byspaces, you name it, we found it. So we're specifically looking at the JavaScript APIs today which offer a rich set of functionality for document authors. These APIs allow you to process forms, control multimedia events, do communication with databases basically all there to give end users really complex, really a lot of options to make complex documents. But it's also a perfect avenue for attackers. If they think outside of the box, you're able to go, you know, kind of leverage these weaknesses within these APIs to do a lot of really interesting stuff. Now, there are mitigations that are built into the APIs and we're going to talk about those right now. It's this idea of privileged versus non-privileged methods. Now, some of the APIs that exists have security restrictions on them. And they can only be executed in what's called a privileged context. So what exactly is a privileged context? Well, a privileged context is really three points within Adobe Reader. One is when you're executing at the console, one, which you'll see a picture of the console later in the slides, then there's the batch processing, then there's during application and initialization events. And if you're trusting the document certificate is when you can actually use these privileged and security restricted APIs. For example, a non-privileged API would be mouseup events, mousedown events and things like that. Things that can be processed within the dock context. An example of a privileged API or a security restricted API is what you see on the slide, which is launch URL. This is not supposed to be executed from the dock context and only be executed when you're doing some sort of automation. If you try to execute a security restricted API from the dock context, you're going to get a security warning like you see on the screen. And you'll see that actually in action shortly when we try to execute one of these APIs from the dock context. So it will pop up to the user and if you're an exporter you probably don't want that to happen. You want everything to happen in the background without people knowing about it. So you want to kind of remove that obstacle from your exploit. There's also the idea of trusted functions. And this is where you're trying to execute privileged functionality from a non-privileged context. Well, why would you want to do that? Well, in certain cases you need those privileged functions for your workflow, right? So you need to launch a URL for some batch for some reason during your batch processing. And so you do this using what's called a trusted function or app.trusted function. And you can see it on the slide there. Hopefully you guys can see it in the back. That AN verify comments is actually a trusted function. And in this function you're going to leverage the privileged APIs. There's this idea of a code block where you've got app begin-priv and app end-priv. And in between those two calls you can actually execute these privileged APIs. And so you can see here on the slide, app.alert is executing in a privileged context and we're going to use this later on when we're actually looking for privilege escalation. But not this exact one, but that idea. There's also the idea of a folder level scripts. Now folder level scripts are available to end users for when they want to use, when they want to use them for automation purposes and they want to use those trusted functions and leverage those privileged APIs. And so these are available in Adobe Reader and you can actually put a set of JavaScript in the JavaScript folder. As you can see on the screen we kind of show it. And in that folder you're going to put your folder level scripts and they'll be available to you in the dot context when Adobe Reader is loaded. And in there you can actually implement trusted functions and use those privileged APIs. Luckily for us, Adobe provides us a set of JavaScript APIs and you can see them on the slide. It's the JS byte code win.bin. And inside of there is a set of APIs that do use these trusted functions. And this will be loaded up into Adobe Reader at the inside root and exposed to the doc when the document is opened. So what you see here is an example of what that code looks like. So you can actually, that JS byte code win.bin is actually compiled SpiderMonkey XDR byte code. And one of the best parts about Molnar's research back in the day was that he actually provided us a decompiler. So you can actually decompile this byte code and go get the code off of that GitHub location and that's kind of where you want to start. You're going to decompile that byte code and you're going to find interesting trusted functions in there. And so when it's actually decompiled, it's pretty messy so you want to pass it through a beautifying process so that you can actually read the code. And you can see here is an example of the color convert function that's inside of there. There's about 27,000 lines of JavaScript within this bin. And this is your place to start auditing. So if we think about this for a second and we are going to be auditing this code and how are we going to actually leverage an attack, we need to kind of, we want to be able to execute some sort of privileged API from within the .context. You want to be able to reach these functions that Adobe considers security restricted just from within the document. This is not something that they normally allow. And so what we're going to do now with in a couple seconds here is we're going to show you how to go through this code and find these vulnerabilities and chain them together so that you can do some interesting things. So before we look at how we manage to find these, you first have to understand that there are a few places in JavaScript as part of the language itself that will implicitly call functions or at least potentially implicitly call functions. So if we look at this snippet of code, this function funk, it takes an argument called argument. And there are three places here where we are potentially unexpectedly calling a function. The first is in the if conditional, if argument dot attribute. And that can potentially either retrieve that property or could execute a getter or accessor method if one is defined. The second is within the called app.alert, you're adding arguments to a string. And so if argument is not a string, then two string has to be called on it. And then the last one is right after the if. And that's where we're setting a value on argument dot attribute. And in that case, we'd be calling, we'd be either replacing that property or calling the setter or mutator method. And this is, this will be vital in a couple of slides. And the main thing to note here is that we can use this to replace properties or just execute code within a potentially different context. For the next couple of slides, we essentially have the setup in the last two lines where we have some object that has some attributes set to a value. Now that's done before we ever get any control and that's essentially out of our hands. What we do have control over is the empty line under it as well as the call to the function. And so the next two slides will basically be replacing that empty line. So the first is define getter and define setter with two underscores before and after them. The way both of these work is you call this function on any object and give it a, give it two arguments. The first is the property name and the second is a function that will actually return the value. In define getter's case, you can use this to overload and essentially replace an attribute that may already exist even if that attribute doesn't let you overwrite it. You can also execute other functions or do anything at this point. After that, there's define setter and as you can imagine, this is the mutator method. In this case, you can do conversions on the input argument or just deny access to ever change that value. The other way, because this is based on spider monkey, is to use the proto attribute. Unlike browsers which have prototype, this only has proto with two underscores before and after. And in this case, all you're doing is creating a dictionary with updated keys and updated values and then setting proto to the original object such that when anything tries to access a preexisting attribute, it'll fall through and still access it. But when it tries to access the properties you care about, it'll get your special value. So as far as getting system level execution, and by system level, I mean within the root context, which is a more privileged context, you have to somehow execute arbitrary JavaScript within, well, outside your context. The easiest way to do that is to grep for eval.  That's actually less readable than I was hoping. But essentially you have calls to eval on potentially untrusted input. The first one there is a call to eval on long entry dot char at. That's the one we'll be focusing on in a couple of slides. And long entry is supplied to that function. And char at is a function that, as the name implies, returns a character. So what we'll do is overwrite or overload that and instead replace it with a custom function so that we can execute arbitrary code there. Once we've done that, we then have to look for ways of escalating privileges within JavaScript. And we do that by grepping for app.beginpriv. The key thing to note here is that we can't just look for app.beginpriv for every match we find. We then have to look to make sure it's within a function that is being sent to app.trusted function. Because if it's not being called from a trusted function, then the user will still get prompted. Within app.beginpriv, there'll be a subsequent call to app.enpriv. And somewhere in between there, we're going to look for some sort of method invocation that we can overload. So here's an example of where we get the system level eval. And it's in AF par state. You can see the second argument is long entry. And all the way at the bottom, we can see that call to eval. So what we can do is just set up a custom hash with a char app that will execute the bulk of the JavaScript payload. Here we are going to replace a, we have a place we can replace a property with a privilege function. This is cb shared review security dialogue. And it's a trusted function, as you can see, when it's being set. And at the very second and last line, you can see the call to beginpriv. And then the last line is a call to collab.is.center URL. So what we can do is replace collab.is.center URL property with app.launch.url. And then since c source URL is a trusted, there is a input argument, it'll just call it directly and we'll be able to escalate from there. So altogether, the first thing we do is set up a system level eval and issue the bulk of our payload. Within the bulk of our payload, we'll replace that call to is.center URL so that we can call app.launch.url or any privileged call. And then we'll trigger it. And here's what it looks like. This is CVE 2015, 3073. Easiest way is probably to look at the bottom. So we start off by calling AF par state. That first argument can be ignored. That's just to hit the vulnerable code. The interesting thing being that we're sending the O object four times. And if you look a couple lines earlier, you can see that we are setting O to be, to have a char attribute where that function will return the exploit function and then call it. The exploit function itself is defining a getter to replace collab within the system level context. And then it's calling CVE shared reviews security dialogue to trigger it. So here we're going to see the normal behavior. This is what it looks like in Adobe reader DC when it's patched. And you can see that all we're doing within the PDF is a call to app.launch.url, Google.com. And it's prompting the user as it's supposed to do. Whereas when we chain everything together, we end up launching, in this case, four browsers. The reason it's four is because we're passing that O argument four times to the function. And that was a privilege execution. So here in the vulnerable version, this is what the JavaScript debugger looks like. It's a little weird to read. Basically the first line in every other line after that is where we are executing JavaScript. So we're executing collab and it's telling us it's a collab object. On the third line, we're replacing collab and setting it to app. And the fifth line is saying let's access collab again and you can see that it's being returned as the app object. So we're replacing it and that's persisting. In Adobe Reader DC after the patch, we're doing the exact same thing. Only now that last line has changed. It is no longer persisting. It's staying as collab because they've blocked our ability to replace that object. So all in all, in order to execute privileged API, we get execution within the system level context by finding those evals. And then within the block that we're going to execute in that eval, we replace a property such that we can call some privileged API. We use launch URL here. But Abdul is about to go over another set that works out better for full RCE. All right. So this whole bypass, JS bypass stuff is awesome. So let's go back to Molaern's bug. Sorry. Can you hear me now? All right. So going back to Molaern's bug. So in their advisory, Adobe stated that this bug basically leads to information disclosure. And that's cool. So we knew that we were able to leak information out of this bug, extract information, read files, and then send it to whatever server we want. But we still needed to take this to the next level if it was possible.  It's just freaking awesome. So the main challenge here was to gain RCE through the JavaScript, create JavaScript that whatever Jayzl discussed. But in order to achieve this, we have to find the right APIs that would allow us to actually do interesting stuff. So it was clear for us that we needed a way to dump a file on disk. And we needed to do this through the JavaScript API. So you know, I started doing like going through the JavaScript API reference that Adobe provided. And started like looking for interesting APIs. And that was a big fail. It was a big fail because most of the documented APIs were really hardened. So there were a lot of restrictions on file types, file contents, and stuff like that. So eventually I was like, screw this, I'm going to get back to memory corruption and fuzzing. And that's it. So one day I decided to write a fuzz module for the collab object.  And then I had a look at the collab object. Basically there, as you guys can see the screenshot, there were like three methods documented in that API reference. So I was like, okay, this is going to be easy. I can implement a fuzz module for this. But I was kind of more curious about the collab object. So I went in console inside Adobe reader and decided to dump all the methods, the actual methods that were inside the collab. And this is what I found. So basically there were like 128 methods. So if we do the math, it's like 125 undocumented methods. So, you know, I have no idea, seriously Adobe. So with 125 undocumented functions, we decided to have a closer look at like the right. So while I was going through the list of functions, I noticed that there are like some interesting ones, which are highlighted right there, which I would later reference as the URI family. So I wasn't like super convinced that this is that the whole, these APIs were not really explored by anyone. So I ran a search on Google and I got nothing, no information, nothing like no documentation whatsoever, no description, nothing. All I got are these two hits. And basically these just describe, they just like list the functions or the methods inside collab. And one of these hits where I report by the Australian Ministry of Defense. So you guys can figure. Right. So I'm going to go over these or the interesting APIs. Just describe them briefly and stuff. So the first one is URI put data. Basically it takes two arguments, the C file URI and the OData. So basically this function, what it does is it takes a data object and it writes it to the path that you supply it to. The delete folder, as the name implies, it takes one argument with the path and deletes that folder that you give it as the path. Create folder, same thing, takes one argument which is the path and just creates a folder at that path. URI enumerate files, it takes a path as well and basically just lists everything inside that path that you give it. And finally the URI delete file, as the name implies, it doesn't create coffee, basically it just takes a path and just like deletes the file.  So internally we talked about it as like some kind of government agency back door, whatever. Right, so just a quick overview of the whole URI stuff. Basically these APIs are used for collaboration. Collaboration is a feature provided by Adobe that would do like, that would allow us to do some shared reviews and stuff like that. It's worth noting that delete folder, delete file, put data and create folder are all privileged APIs. So you guys cannot exclude them from the normal doc context. So they have to be chained by one of the bypasses that Jason discussed. The only one that's not privileged is URI enumerate files. So you guys can run it from the doc context. Right, so these functions have one thing in common which is the first argument which is the path. Basically the path should be a UNC path and the UNC path should be of a specific format, basically SMB or file, SMB slash slash or file slash slash. So these APIs are not perfect. Basically they fail at sanitizing the path and the old school trick of SMB slash slash slash slash C dollar sign, whatever works like a champ. URI put data has two major fails. The first one is it doesn't check the file type that it's going to write to and it doesn't check the file for sure. And the next big fail is that it doesn't really check the contents of the data object. So if you guys can provide PE file data inside the data object and write it to an EXE file, it doesn't complain.  Thank you, Adobe. All right, so what do we have here so far? So we know that our problem of finding an API that would allow us to dump a file on disk is solved. But if we have a closer look at URI put data, specifically the second argument which is the data object, that's an interesting piece of information.  And I found nothing as usual. But during my experiments I noticed that if you supply a stream object instead of that data object, then URI put data would not complain. Which is awesome. Because we can create stream objects in multiple ways. So you guys can see in my screenshot right there. I basically created a stream object out of a string and then supplied it as the second argument for URI put data. And basically it showed it to whatever SMB path I gave it. Which is cool. All right. So what we know as well is that we can attach files to PDF documents. We can attach whatever files we want, whatever file types and stuff like that. And we also know that we can extract the file contents in and store them in a stream object using documented APIs as well. So what we should do is that we should change the URI put data with one of the bypasses, of course, supplying a stream object to it and then we can write whatever we want on this. So then what? We know we can dump files and stuff. But how can we get RCE out of this? So basically there are two ways to get RCE. So the first way, I call it the Chalky way. So basically because Chalky is obsessed with log off, log ends, payloads. So basically we can just like write our file to the startup folder and then just wait for a log off and log in. So the second way, which is my favorite way, and then of course the cleaner way, which is writing at the LL and forcing Acrobat to load it right away. And that is possible in specific scenarios where you load a PDF in a specific way. Internally we call this the Moliniawi way. Basically Moliniawi is one of our colleagues, so he's obsessed with clean exploits. So basically we went with the Moliniawi way. And by the way, Ponto in 2015 was a blast. All right, so this table shows the vulnerable versions of Reader and Acrobat Pro. So basically Reader and Reader DC are vulnerable in all versions, but there are limited stuff that we can do on Windows OS due to the sandbox technology that they have. So it limits our ability to write files on disk and stuff like that, but we can still exploit Mac or SX with no problem. Acrobat Pro and Acrobat Pro DC is vulnerable on all versions because it doesn't have a sandbox. So you guys might be asking question why we didn't enable like specific version numbers and stuff. Well, it's because the first time we tested this it was version 11.0.10 and then Adobe patched it and then we broke the patch and then Adobe patched it again and then Adobe and then we broke the patch again and it's still not patched like in process. So everything's vulnerable basically. All right, so let's put this all together. Now we know that Adobe Acrobat Pro doesn't have a sandbox, so it's the easiest target to exploit. So basically our exploit, so these are the steps for the exploit basically just attach our payload to the PDF and then we should write a JavaScript code that basically executes when the document opens. So this JavaScript code should be composed of the following, a code that extracts the contents of the payload and saves it in a stream object. Then we have to bypass the GS privileges to execute URI put data and then dump the DLL and then have Acrobat basically load that DLL. So I have a demo here that demonstrates this exploit which runs on Windows 8.1. It exploits Acrobat Pro 11.0.10 and the exploit basically dumps the DLL and have Acrobat Pro load that DLL and just pop calc. Of course. So it dumped the DLL, you guys cannot see it, but there you go. So it's not over yet. So basically we paid a visit to Reader on MacOS X and this is the latest version of Reader on MacOS X and pops calc. As you guys can see, this is the latest. Patched. There you go. And by the way, this works on 64 bit too. All right. So I'm going to hand it to Brian so he can just wrap this up. Thank you very much. So much taller than I am. All right. So in conclusion, I mean really what we wanted to start off with is kind of an idea of, you know, go after an application that we hadn't really been getting a lot of submissions in. And we did this and we looked at prior research. We looked at the occasional submission that would come in. And our goal was to take that to the next level. Like the existing research that existed at the time would only allow you to disclose information on a server. But we wanted to take that to make sure that we could get remote code execution so that people would treat these vulnerabilities with the criticality that they are. And so what we did, we also wanted to kind of challenge ourselves. We are actually mostly memory corruption exploiters and reverse engineers looking for memory corruption bugs and use after freeze. So we wanted to do this in a way where there would be no memory corruption. We wanted to use logic errors or logic issues inside of an application so that the exploits would basically run clean. You saw in the videos that were on the slides that there was no crashing at all. The things ran really smoothly, really cleanly. And shows just kind of the power of these type of exploits. So our plan of attack was to obtain an arbitrary eval by using the JavaScript overloading and redefinition capabilities. We wanted to chain that eval with a privilege escalation through these app.trusted functions. Then we wanted to leverage the undocumented APIs that existed in Adobe Reader to execute our malicious code. And we were able to do all three of these things to actually produce some pretty interesting stuff. Then we wanted to profit from that. And well, because we're a bug bounty program and we can't sell to ourselves, we decided to submit it to DEF CON so that the corporation would pay for us to come to Vegas. And that kind of thing. But yeah, so we wanted to share with the community we are a bug bounty program. And so if you decide to take this research and look inside some of the inner bits of Adobe Reader and you do find vulnerabilities, there are quite a few in there. We do purchases and we do pay quite a bit of money for them. So if you're interested, zerodayinitiative.com will submit the programs. These individuals on the stage and a couple over there will do all the analysis. So send them as much bugs as possible so that they have to do a lot of work. Outside of that, we are celebrating our 10-year anniversary as a program. And so up on the stage, we have these challenge coins. They're actually our dual use technology. They are a challenge coin. And they are also a bottle opener. So get them before the Wasnar takes them away. For you exploiters out there, you get that job. All right. Thank you very much. I hope you enjoyed the presentation. We'll be taking questions and come on up.  And I hope you guys have a good DEF CON.


Premier League debut, first game against Spurs, on match of the day, man of the match. Tell us about your day. Oh, it's been unbelievable. Obviously I got to all yesterday morning what I got for that I've been put in. Since then I've just been buzzing and readying to go. It doesn't get much better than being on Sky Sports and again starting on the great side. So I was happy that I could keep clean sheet and we got three points in the end. Some of those saves in the first half, they weren't easy. They were pretty impressive. Yeah, thank you. It was buzzing that I could make, helped the team out to get the win as well. Once you make the first one, you get into a rhythm and you get in confidence as you make the more saves. But I was just buzzing that. It went well. Is there one in particular that stands out that you look forward to seeing back? Yeah, I think the first one because it's your first save and the Premier League gets you into the game and stuff. And just the confidence group from there I guess. You found out yesterday morning, how's the last 24 hours being for you in terms of a frame of mind, in terms of being ready and not being nervous, not being overall by all? Yeah, definitely. Just got to relax and see it as a game of football at the end of the day. I didn't see it as too much pressure, just got out and expressed myself. The gap would just say go and enjoy yourself and that made it easier for me. Last night I just chilled out with the parents, trying to take my mind off and then thankfully today went well. I saw in the first few minutes the ball seemed to come to you and you seemed to want to demand it back to your feet. Was that to calm yourself down or was it just the sort of confidence you have as a player? No, it's the way I've always played in with the 21s and stuff so I guess it's just in the way I play. I like to play off in the back and I'm not afraid to get in the ball. There's a few bits that I can improve on today but it went okay in the end. Okay indeed.  Was there anything that you learnt today, anything that surprised you at all about playing coming up against Tottenham? Yeah obviously the standard cell highward teams like that but I've just learned a lot about myself and seeing I could deal with it under high pressure situations. I think that was the main thing that I got from today. And the game itself of course the first half was all about you and the second half I suppose wasn't really much to do with you because it was all about us trying to make sure we got that win. Yeah 100% you know as I said earlier it was a game of two halves wasn't it so it was great to get obviously the first half was loads of shots nice and busy but then the second half was just keep your concentration and make sure you're on it. But you know a team of Tottenham's calibre or even with nine men they're still dangerous so to get the clean sheet was great. And then of course the 90 minutes ticks pass we've won the game but that only just sort of start the adventure for you. You've spoken to Sky, you've spoken to Manchester, you've been upstairs to get the man of the match award. What's the last 10-15 minutes been like for you? It's been a bit crazy yeah it just hasn't sunk in yet. I'm still waiting to see the family and stuff so that'll be a great moment as well but I'm just let it enjoy it all and it's a great day. And it seems as though you've hopefully got a really bright future with us? That's the plan hopefully and I can keep pushing on now still a game next week as well that will try and push into the team as well and hopefully have a good pre-season as well next year. Has the manager mentioned anything either about your performance today or maybe your prospects for next week? Not yet there's been so many interviews so for having had a chance to speak in detail to anyone but you know all the lads were buzzing for me which was great as well. Congratulations Mark. Congratulations Mark. Thank you.