go get a yubikey! yubi.co/lowlevellearning-2024 Edit: I may have caused some confusion about the derived Private Key. When you generate the private key using 'ssh-keygen -K', you're not actually downloading the key itself. You're create a key that stores the credential ID of the Yubikey. You never have access to the private key within the Yubikey. Sorry for the mixup!
Right, me and most of my family is using Firefox for over 20 years now. Well my family essentially had not really a choice as I have setup most of their PCs :) Though it's not like they care or know anything about what a browser actually is. It's "the internet". The only cases where I use chrome was on my old Nexus tablet and my smartphone. Though I do have FF on them as well. But chrome runs a bit faster on those weak devices :P Though whenever I need actual customization, I switch to FF. My FF in my phone also has an altered User-Agent to pretend to be a PC and not a mobile device. Can be really handy in many cases. Websites nowaday are really great in messing up themselfs in an attempt to "adjust" to your device.
This man unlocked early game marker tech at level 50. Edit : This just made me realize he has never known the joy of making a sword out of many markers, and then whacking a classmate with it
Doesn't this also vary by specific type of marker? For example, his is the type where the cap has a "peg" that inserts into the top of the barrel, which allows you to chain several markers together, but I've also seen markers where the cap stores the other way around, and does not chain? Visual example below. Marker with nesting caps: (barrel -> cap) ===>- |>| capped |>|===>- uncapped Marker with non-nesting caps: ===>- |>| capped |- uncapped
@@Stratelier Bro, we are all tech nerds... we understand "the other way around" without the need for you to mansplain with visual examples. But feel free to share the PPT you are working on once it is ready...
I could imagine ways to use this even if the spawned child process seals all it's allocations and then runs out of memory. The child process would just fail and the main process would create a new one with more memory. Given how file reading code for old formats also lack much attention this could be useful for more than just browsers.
@@jfbeam but when the userspace is so tightly locked down, it makes it much harder for an attacker to get kernel level privilege. once he has that, there's really not much you can do. at least not with software
Or a hardware implemented shadow stack. Of course that's gonna put hard limits on the level of recursion supported and how's that work with with each process needing its own stack. You might need a way to read the hardware stack for debuggers but there should be no need to modify it. I haven't seen any modern architectures use this but I think some older architectures did it.
@@treyquattro but trying to return to the stack would make the program crash, because the address on top of the stack wouldn't match with the one on top of the shadow stack.
all this knowledge and smarts, but you just learned the marker cap thing? There is hope for me, yet! just pulling your leg, love your channel, I always learn something new... but not this marker thing, I knew that already.
While mseal provides robust security by preventing any modifications to sealed memory, it comes with significant downsides. Long-running services cannot effectively use this syscall because they would retain all sealed memory until the process terminates, leading to increased memory usage over time. This could eventually exhaust available memory, forcing the kernel to kill the process to free up resources. Therefore, using mseal in long-running applications is not practical due to the risk of memory retention and potential system instability. Additionally, the most common exploits target long-running services because they need to be persistently running. This makes mseal ineffective for protecting these services, as they cannot afford to retain memory indefinitely. So, what exactly is this protecting?
The main purpose of this is to be used by the kernel itself, to protect the stack and other shared areas. Not sure if there's of any use on userland (Or even if it can be used there)
the person who sponsored this change works with the V8 engine. Will I see the chromium browsers eat more memory on Linux now and require periodic restarts for simple garbage collection? worrying, but also, restarts are how updates are done so, idk if it is a problem for that specific use.
In the case of V8, the user heap is already sandboxed in order to limit the ability to exploit the software via memory corruption. However, if someone manages to escape the sandbox, nothing prevents it from remapping it executable, then jumping to the payload stored there (since the heap is, by design under user control and relatively big, we must consider it tainted). The stack size being relatively limited and already partially protected via canaries, it's way harder to store a full payload on it, so protecting the sandboxed heap against being remapped already does a lot
Used on OpenBSD for over a decade without ballooning issues AFAIK but probably does require a slower/more secure free() implementation to complement it. Which the Linux kernel has also had for years.
The marker thing is probably an indicator of someone who grew up with a cellphone, versus someone who did not...and was bored...and tried all the things including how many markers you can stick together before it collapses under its own weight as a bridge.
Chromium "The only browser engine" Firefox: Screaming on a market place inbetween banners of ads. Servo: Scouring bins and baskets trying to find support. Ditto: _shrug_ IE: WHY ARE YOU RUNNING
It would be cool if you made a video walking through the actual steps of the example you showed, writing "malicious" code, overflowing the stack and setting the return address to the malicious code for example
Numerous examples on UA-cam if you search. FT did a good DNS RCE where they pretty much explain the steps they took to overflow the buffer and the stack return address and then built a ROP chain to execute the code that they sent ua-cam.com/video/YCOoc1U7kPA/v-deo.htmlsi=XE6DQFjG94BZJ7G5&t=430
@@ManuFortis One of NetBSD's main features is its portability and support for the most obscure hardware. It doesn't stand really stand out in other way since both FreeBSD and OpenBSD have more important aspects than just trying to run it.
@@ManuFortis I don’t know much about NetBSD so I didn’t wanna comment, but hey, looking at the charts now, I guess one day Linux can catch up with NetBSD, when it comes to portability, aye? :D
I didn't understand most of the technicality's in the video, but I feel intellectually superior to Low Level, since he just figured out the marker cap trick.
Another fun fact about those markers, it's the same ink as in a sharpie. It just has a different solvent that prevents it from drying out rapidly. You can use an expo marker and go over a sharpie mark on a whiteboard, then wipe it off, and after a few cycles it'll get cleared off.
I thought this comment section was about mseal(), but it's all about markers. I don't get the reference, did I just end up in the wrong comment section? Some UA-cam memory leak somewhere? Please, help!🙏
Idk if you legit don't understand the marker command but it's hilarious six people liked the comment without replying with an explanation Edit: mark that seven
no, what you found is proof of the average IQ of the average social media comment section. Not many know what the mseal will do, but many more know what a marker sword is. which one do you think people will be able to talk about? the one with least resistance and confidently know enough to post about as if there are not other 100s of comments letting the youtuber and other viewers know about the markers they know so well. I on the other hand can't deny that I will miss the days I use mprotect to gain code execution. V8 is already strong in protections and require so much to get close to a working POC. most of the time relying on old versions of chromium to have fun with as the more recent ones are too complex to enjoy that quick satisfaction that one gets from solving a challenge. Even CVEs dont offer enough info, which is fine as I doubt many want their systems to be easily broken into. I sometimes do miss the days before AMD64 for which in a x86 environment would allow you to just load all the ROPs and the needed arguments in the stack instead of worrying about having to find gadgets to ROP the arguments into the registers. sometimes I am lazy, and want to find enjoyment in something that is getting progressively harder in the modern age. RIP tbh, if anyone did care about ROP security, we would be using shadow stacks that are separate from our modifiable variables to hold the return addresses. its been a solved problem for a long time, but its definitely slowing down execution a little. I wonder if mseal is truly going to solve it without the loss of performance.
Not a memory leak, go back to the beginning of the video. You read the comments while the audio is background noise and missed the part where he didn't know how that you can put the cap on the marker in the back of the marker and that's why people are talking about marker swords
This is an interesting idea, but I'll say it again, the actual biggest source of errors is not checking user input. If you use gets() or if you use scanf() in that way, you are not checking user input at all. That is the real error. The memory corruption is merely a side effect of what you've already done wrong.
Honestly the 2 things I'll levy at whoever is in charge of C's specification at this point is why do header files exist in 2024, and a hard deprecation of use of pointers as arrays never happened. An array should be pointer + length. Then bounds checks can be done.
@@chainingsolid Dramatically changing the C spec is essentially not going to happen, it has to retain legacy computability. That said, newer languages obviously dont need headers anymore and some (like Rust and Zig) implement slices that are as you say pointers + length
@@futuza Typing stuff twice. And being forced to predeclare anything before you can use it. They have a great use in supplying an API, but normally are just duplicate information.
@@steffennilsen2132 I agree backwards compact is super important. I'm not implying they should stop compiling old code. They should be making an easy to use replacement for pointers pretending to be arrays that can be used for future code.
I fail to see how this makes hacking “impossible”. With the nature of the stack, it makes it impossible to make it immutable. This doesn’t inherently stop ROP or make it any harder either. I’d argue if you had a ROP primitive and the gadgets to be able to call mprotect on the stack or another memory region to make it executable, you’d have the gadgets to escalate a limited ROP primitive into something more useable (I.e increasing allowed ROP chain size, where it’s placed, or pivot to another primitive entirely). This definitely can be an obstacle in some attack vectors, but I don’t think it’s going to nearly have the same security impact that stuff like stack canaries, ASLR, seccomp, etc presented. Sandboxing or permissioning will never make memory corruption “impossible”. If that were the case, we would’ve seen binary exploitation die long ago.
It's funny that a week ago, I hadn't even heard of Yubikey. Then, 3 days ago I got a new laptop from my employer with a USB Yubikey plugged in, and now, all of the sudden, we also have video featuring a Yubikey 😁
1:01 No, Chromium is *NOT* the basis for all the browsers on the internet. For most, sadly, it is, but not all. Firefox and Safari still have their own rendering engine.
Embedded boy here. Have you ever heard about writing past the canary ? Alto this is a nice feature that will decrease the attack vector we're not out of the woods yet. On of the biggest problems is mixing data with program.
Nice! You caused me to have an epiphany - That moment where the overflow refuses to crash and gives control to a hacker's program. That makes so much sense to me :) thanks
crashing is bad, it should only occur when something impossible for the computer to do or continue doing. low level control allows you to do almost anything with memory. Security is tricky because the computer can't guess what you expect to happen. that is why you setup the rules yourself when dealing with low level code. otherwise use something like rust for the attempts at automating the rules for you as most use cases don't need to be that free with how to handle memory.
I've used Chromium browsers for years but have grown tired of poor integration with my desktop. I recently discovered Zen Browser, and I'm actually quite enjoying it. I'm also watching the development of Ladybird browser with great interest. We need more diversity and competition back in the browser market.
Nerds don't realize that an astonishing percent of people use whatever is default. 90+% of all Android traffic is through stock browser aka chromium. As in, 90+% of Android users never install any other browser. At all. Ever.
"Memory corruption has been responsible for 70% of hacks in the last 20 years" Do you have a source for that? Are you talking about the google and Microsoft study of 2017 (I think?)?
Well drivers are the primary way to get a rootkit functioning with these complex A/V system. The main way to enable this is attach to a firmware level driver and overflow and break the services associated then move on from there.
the yubikey has cryptography hardware to encrypt your ssh key and do the authentication of the public key with the key never leaving the yubi key itself. A normal USB drive would have to copy the private key to the computer's RAM, thus exposing it.
@@godofpotatos4691 yes, but only if you want to download it locally (i.e. if you manually execute that command from the video). Normally you don't do that, since it's considered insecure. You want to let the Yubi key do its own thing
His implementation is even worse than storing the key temporarily in RAM. He's storing it to disk each time he wants to use it, nullifying the reason to even have a Yubikey or smart-card in the first place. At the very least, if a security program, service, or framework supported the Yubikey/smart-card, it could store the key in protected RAM and securely communicate with the Yubikey/smart-card in a way that doesn't require the program programmers or user that needs it to be an expert in cryptography, in order to prevent side-channel attacks. But, the way he does it is terrible.
Haven't we learned by now that calling something unhackable is just begging someone out there to crack something just to prove you wrong lmao Also I think it's very debatable that memory corruption is the "#1 cause" when so many prominent hacks lately have been due to social engineering. Yes I know memory corruption is still common and abused a lot, I just don't think it's fair to say it's #1
Its not unhackable, but if i understood the feature correctly, then it will be a pain in the ass for hackers to get around if it becomes widely used. Also the thing is, we cant really fight against social engineering. People will always keep clicking on links and will always post everything they can about their life online, so we cant do much about that. I would guess aside from social engineering, memory corruption has got to be one of the top 3 at least
@@SergeantExtremeno for a few reasons - microsoft goes out of its way to make its users tech-illiterate - windows loves showing dialogs all the time that people will learn to click away without reading (nothing to do with linux vs dos, but the de and the culture should be considered too) - windows encourages running as admin, which most linux distros don't - windows comes with lots of juicy telemetry data ready for the successful attacker (recall is a particularly egregious example), which most linux distros don't collect
Linux is just as easy to leave a port open, windows automatically handles a lot of measures automatically whereas with Linux you have the sole responsibility of securing and ensuring good security practices
@@yjlom 1. I could argue the same about Linux. A great example is the push to force users to download and install software only from "stores". When I complained about this in the distro forums, I was told that installing software from outside of stores was a "power user" move, and it's something a regular person shouldn't be doing. You can't get more tech illiterate than that. 2. Windows doesn't encourage running as admin with the exception of highly specialized software such as anti-virus, data recovery software, and driver software. 3. I don't necessarily agree that Windows shows a lot of dialogs. For the most part, pop ups only occur if something goes wrong. This is especially true in this day and age. 4. Although, I do agree with your point on telemetry.
I’m learning low level programming from a guy who just figured out expo caps click on the end. You never stacked expos in school? Love your content by the way, it’s some of the best.
Oh, linux caught up to what openBSD has had for 14 years now. Cool. but it being on linux means it's a trash security feature that's going to be forgotten about in 3 years
BSD had a first version this from 2022. Linux made its own version in 2023 with some extra features. After a year, changes on both systems end up being very similar solutions. (THat's not 14 years)
It's not *exactly* what has been in OpenBSD for yonks, but I'd bet the idea comes from OpenBSD's work, it was implemented there first. What is really galling is the Power architecture has stuff like access ordering (PROT_SAO) since kernel 2.6 that Intel/AMD world still without AFAIK.
There was a time when computing resources were so scarce that memory that was both writable and executable was a feature. "Self-Modifying code" as it was called back then was always black magic, but it could do amazing things. It's obvious though that in the modern world we live in security is way more important than this level of code optimization and I'm glad to see it finally fall by the wayside.
For reasons I can't really explain, the "trick" about putting the marker cap on the back made me laugh hard. It evokes this image of a whole cohorte of young people not knowing about things like phones with rotary dials, modems and cassette tape recorders anymore. Yes, there are amazing things in the real, physical world out there! Like stackable markers.
when I was in gradeschool, I'd connect a bunch of those markers together by using the cap connection thing that you mentioned in the video and make a "sword." obviously when I hit something, it all shattered, but it was very fun :3
My question is, why don't they fix the programs that are buggy instead of a bandaid to get around that buggy software/code? This would be FAR more efficient.
Seems like a logical inclusion. It's analogous to a topic from the legal world, regarding Trusts. Revocable Trusts always are vulnerable to being changed, much like a program with memory vulnerability can be altered so as to do something beyond what its designers or users intend. So there exist Irrevocable Trusts, which sacrifice the ability to make on-the-fly changes to the Trust (which might serve to legitimately advance its goals) in exchange for the increased certainty that its terms and holdings will remain unmodified. It honestly seems a little weird that there hasn't been such a feature until now, as that whole schema depends on having access both sides of that tradeoff.
not only you can put the buffer size with scanf via the string formatter, the compiler is smart enough to detect if the size provided to scanf is too big
Here is a curious challenge i don't see people commenting on, try making a "vulnerable C program" that compiles using security features of Clang or GCC. OpenBSD users rise 🍷🗿
Hot take: If the stack architecture was itself split into two distinct regions -- one to hold all your typical stack variables, and the other to separately hold the return addressed needed by the cpu for proper call/returns (maybe even hold the latter in a cpu register/cache) -- then memory corruption with code execution hacks would ALREADY be (almost) impossible.
LowLevel : Linus is very passionate Linus on this patch discussion: Stop this. I do not want to hear your excuses for garbage any more. We're done. If I hear any more arguments for this sh*t, I will literally put you in my ignore file, and will auto-NAK any future patches.
go get a yubikey! yubi.co/lowlevellearning-2024
Edit: I may have caused some confusion about the derived Private Key. When you generate the private key using 'ssh-keygen -K', you're not actually downloading the key itself. You're create a key that stores the credential ID of the Yubikey. You never have access to the private key within the Yubikey. Sorry for the mixup!
Best Yubikey ad yet
what's your source, I want to read the blog myself
I have one and I actually love them for gpg
Please do a longer video where you show the many applications of yubikeys! That's the kind of add that I would LOVE!
Now we're learning about pen caps? How low we going? I'm going to start a Limbo code channel. It'll just be a reaction channel. :) Have a great day!
How did you just realise the marker thing
@@anantmishra-h3m wtf
He definitely got the source code of the marker to know that bug.
When I was in school, I used to stack them on top of each other to make a giant marker sword.
I'm sorry, I made it 15 seconds into the video and had to pause to find this comment because seriously.
He's being sarcastic ... He could have said, in other news, water is wet...
Firefox: Excuse me? 🤨
Yea that chromium statement is not nice
I'm using Firefox based Zen Browser and loving it. 😃
@@ContemplativeCat same lol, its pretty nice
But realistically though, firefox has a smaller share of browser users then linux has of desktop OS users
Right, me and most of my family is using Firefox for over 20 years now. Well my family essentially had not really a choice as I have setup most of their PCs :) Though it's not like they care or know anything about what a browser actually is. It's "the internet". The only cases where I use chrome was on my old Nexus tablet and my smartphone. Though I do have FF on them as well. But chrome runs a bit faster on those weak devices :P Though whenever I need actual customization, I switch to FF. My FF in my phone also has an altered User-Agent to pretend to be a PC and not a mobile device. Can be really handy in many cases. Websites nowaday are really great in messing up themselfs in an attempt to "adjust" to your device.
too busy hacking your preschools web server to pick up the marker cap beta? insane
If chromium was the only browser engine left the web would be TOAST
its 90% there
Yeah, good thing we also have Microsoft edge, opera, brave, Vivaldi...
@@echoptic775 Firefox?
@@echoptic775this is joke right?
yeah the insane competition of 3 browser engines
does this mean he never made an expo marker sword?
@@hatacoyama1246 Inconceivable!
Nooooooo!!!!
what is that
he never had tried to balance a pen tower on the palm of his hand, having to dodge the projectiles on their in evitable way down.
Not everyone has twenty of these. Now we have two, and one is dead.
This man unlocked early game marker tech at level 50.
Edit : This just made me realize he has never known the joy of making a sword out of many markers, and then whacking a classmate with it
fr 😭
Doesn't this also vary by specific type of marker? For example, his is the type where the cap has a "peg" that inserts into the top of the barrel, which allows you to chain several markers together, but I've also seen markers where the cap stores the other way around, and does not chain? Visual example below.
Marker with nesting caps: (barrel -> cap)
===>- |>| capped
|>|===>- uncapped
Marker with non-nesting caps:
===>- |>| capped
|- uncapped
@@Stratelier Bro, we are all tech nerds... we understand "the other way around" without the need for you to mansplain with visual examples. But feel free to share the PPT you are working on once it is ready...
The title is a real clickbait. This feature would make hacking harder but certainly not impossible
Starting to realize this dude is just clickbait. Him and Prime are rocking Programmer UA-cam with the clickbait, hard.
Duh
youtubers who don't clickbait are all dead. it's natural selection of social media
0:10 Elementary school. Thats how long ago I learned that. I'm 30.
i usually just seal the marker by putting it back in my nose.
@@MissMyMusicAddiction or somewhere else 😏😏
@@AL-eu4ey yee i usually put it in mi butt when im done
lmao
A summary of what this function does is pretty much:
See this memory? never ever ever EVER let me edit the permissions of this memory EVER again!
I could imagine ways to use this even if the spawned child process seals all it's allocations and then runs out of memory. The child process would just fail and the main process would create a new one with more memory. Given how file reading code for old formats also lack much attention this could be useful for more than just browsers.
At least _in userspace_ ... (hint: the kernel can screw with those flags all it wants.)
@@jfbeam but when the userspace is so tightly locked down, it makes it much harder for an attacker to get kernel level privilege. once he has that, there's really not much you can do. at least not with software
I would say give it a couple months, someone will figure out how to disable it, work around it, or use it to their advantage. 1337s gonna 1337
yup... there was some dude(s) who would go through intel architecture for fun and......... spectre.
@@PoseidonDiver God Bless Them.
What
Its like trying to make an unpickable lock.
OpenBSD uses methods like this and no major CVE since 2006
"Shadow stack" is also something that prevents these kinds of attacks, by having a separate stack for return addresses
Like Forth?
I was thinking the same, but of course that won't protect against someone flipping the NX bit on the stack via mprotect (or any other rw memory pages)
Or a hardware implemented shadow stack. Of course that's gonna put hard limits on the level of recursion supported and how's that work with with each process needing its own stack. You might need a way to read the hardware stack for debuggers but there should be no need to modify it. I haven't seen any modern architectures use this but I think some older architectures did it.
@@vk3fbab shadow stack is a hardware level protection by definition
@@treyquattro but trying to return to the stack would make the program crash, because the address on top of the stack wouldn't match with the one on top of the shadow stack.
all this knowledge and smarts, but you just learned the marker cap thing? There is hope for me, yet!
just pulling your leg, love your channel, I always learn something new... but not this marker thing, I knew that already.
Man, I used to make giant rods full of markers by putting them end to end like that. The Sword fights in the offices were EPIC.
brings me back to school.
Sounds like an epic place to work in
Cringe
While mseal provides robust security by preventing any modifications to sealed memory, it comes with significant downsides. Long-running services cannot effectively use this syscall because they would retain all sealed memory until the process terminates, leading to increased memory usage over time. This could eventually exhaust available memory, forcing the kernel to kill the process to free up resources. Therefore, using mseal in long-running applications is not practical due to the risk of memory retention and potential system instability. Additionally, the most common exploits target long-running services because they need to be persistently running. This makes mseal ineffective for protecting these services, as they cannot afford to retain memory indefinitely. So, what exactly is this protecting?
The main purpose of this is to be used by the kernel itself, to protect the stack and other shared areas. Not sure if there's of any use on userland (Or even if it can be used there)
the person who sponsored this change works with the V8 engine. Will I see the chromium browsers eat more memory on Linux now and require periodic restarts for simple garbage collection? worrying, but also, restarts are how updates are done so, idk if it is a problem for that specific use.
@@framegrace1 I was under the impression the V8 engine will use this new feature to strengthen the chromium browser security
In the case of V8, the user heap is already sandboxed in order to limit the ability to exploit the software via memory corruption. However, if someone manages to escape the sandbox, nothing prevents it from remapping it executable, then jumping to the payload stored there (since the heap is, by design under user control and relatively big, we must consider it tainted).
The stack size being relatively limited and already partially protected via canaries, it's way harder to store a full payload on it, so protecting the sandboxed heap against being remapped already does a lot
Used on OpenBSD for over a decade without ballooning issues AFAIK but probably does require a slower/more secure free() implementation to complement it. Which the Linux kernel has also had for years.
The marker thing is probably an indicator of someone who grew up with a cellphone, versus someone who did not...and was bored...and tried all the things including how many markers you can stick together before it collapses under its own weight as a bridge.
Chromium "The only browser engine"
Firefox: Screaming on a market place inbetween banners of ads.
Servo: Scouring bins and baskets trying to find support.
Ditto: _shrug_
IE: WHY ARE YOU RUNNING
wine gecko:
Well, IE is a deadend, but Safari and others are running Webkit, not Blink (Chromium)
WebKit dusting in the corner
Ladybird: vibing in the corner
netscape navigator: rotting away
@0:33 you could say thousands of years, starting in the second millennium(1990s) and still continuing into the third millennium(2020s)
Someone clearly never made marker swords when they were a kid.
It would be cool if you made a video walking through the actual steps of the example you showed, writing "malicious" code, overflowing the stack and setting the return address to the malicious code for example
Numerous examples on UA-cam if you search. FT did a good DNS RCE where they pretty much explain the steps they took to overflow the buffer and the stack return address and then built a ROP chain to execute the code that they sent ua-cam.com/video/YCOoc1U7kPA/v-deo.htmlsi=XE6DQFjG94BZJ7G5&t=430
Good to see Linux catching up with OpenBSD on the security side and FreeBSD on the performance side.
Yep I came here just to say 'but OpenBSD has done this for like two decades'
Curious, but why no mention of NetBSD? Just installed it on a side rig to tinker with, so am curious why it's not mentioned.
@@ManuFortis One of NetBSD's main features is its portability and support for the most obscure hardware. It doesn't stand really stand out in other way since both FreeBSD and OpenBSD have more important aspects than just trying to run it.
@@gøckłøłe Important aspects in which way? Feel free to explain at length if you feel you must to get the jist of things across. I'll read it.
@@ManuFortis I don’t know much about NetBSD so I didn’t wanna comment, but hey, looking at the charts now, I guess one day Linux can catch up with NetBSD, when it comes to portability, aye? :D
I didn't understand most of the technicality's in the video, but I feel intellectually superior to Low Level, since he just figured out the marker cap trick.
Note: Chromium isn't the only browser engine on the internet.
no one said that it was, chromium is just the world's most popular engine
Another fun fact about those markers, it's the same ink as in a sharpie. It just has a different solvent that prevents it from drying out rapidly. You can use an expo marker and go over a sharpie mark on a whiteboard, then wipe it off, and after a few cycles it'll get cleared off.
Oh that's nest, I suppose that's why if you leave expo on for too long it becomes permanent lol
That keyboard sound is pure eargasm. It's rare when not on a specialized keyboard channel.
I thought this comment section was about mseal(), but it's all about markers. I don't get the reference, did I just end up in the wrong comment section? Some UA-cam memory leak somewhere? Please, help!🙏
Idk if you legit don't understand the marker command but it's hilarious six people liked the comment without replying with an explanation
Edit: mark that seven
no, what you found is proof of the average IQ of the average social media comment section. Not many know what the mseal will do, but many more know what a marker sword is. which one do you think people will be able to talk about? the one with least resistance and confidently know enough to post about as if there are not other 100s of comments letting the youtuber and other viewers know about the markers they know so well. I on the other hand can't deny that I will miss the days I use mprotect to gain code execution. V8 is already strong in protections and require so much to get close to a working POC. most of the time relying on old versions of chromium to have fun with as the more recent ones are too complex to enjoy that quick satisfaction that one gets from solving a challenge. Even CVEs dont offer enough info, which is fine as I doubt many want their systems to be easily broken into. I sometimes do miss the days before AMD64 for which in a x86 environment would allow you to just load all the ROPs and the needed arguments in the stack instead of worrying about having to find gadgets to ROP the arguments into the registers. sometimes I am lazy, and want to find enjoyment in something that is getting progressively harder in the modern age. RIP
tbh, if anyone did care about ROP security, we would be using shadow stacks that are separate from our modifiable variables to hold the return addresses. its been a solved problem for a long time, but its definitely slowing down execution a little. I wonder if mseal is truly going to solve it without the loss of performance.
Not a memory leak, go back to the beginning of the video. You read the comments while the audio is background noise and missed the part where he didn't know how that you can put the cap on the marker in the back of the marker and that's why people are talking about marker swords
You really weren’t paying attention to this amazing presentation about markers?
This is an interesting idea, but I'll say it again, the actual biggest source of errors is not checking user input. If you use gets() or if you use scanf() in that way, you are not checking user input at all. That is the real error. The memory corruption is merely a side effect of what you've already done wrong.
Honestly the 2 things I'll levy at whoever is in charge of C's specification at this point is why do header files exist in 2024, and a hard deprecation of use of pointers as arrays never happened. An array should be pointer + length. Then bounds checks can be done.
@@chainingsolid Dramatically changing the C spec is essentially not going to happen, it has to retain legacy computability. That said, newer languages obviously dont need headers anymore and some (like Rust and Zig) implement slices that are as you say pointers + length
@@chainingsolidwhat's wrong with header files?
@@futuza Typing stuff twice. And being forced to predeclare anything before you can use it. They have a great use in supplying an API, but normally are just duplicate information.
@@steffennilsen2132 I agree backwards compact is super important. I'm not implying they should stop compiling old code. They should be making an easy to use replacement for pointers pretending to be arrays that can be used for future code.
I fail to see how this makes hacking “impossible”. With the nature of the stack, it makes it impossible to make it immutable.
This doesn’t inherently stop ROP or make it any harder either. I’d argue if you had a ROP primitive and the gadgets to be able to call mprotect on the stack or another memory region to make it executable, you’d have the gadgets to escalate a limited ROP primitive into something more useable (I.e increasing allowed ROP chain size, where it’s placed, or pivot to another primitive entirely).
This definitely can be an obstacle in some attack vectors, but I don’t think it’s going to nearly have the same security impact that stuff like stack canaries, ASLR, seccomp, etc presented.
Sandboxing or permissioning will never make memory corruption “impossible”. If that were the case, we would’ve seen binary exploitation die long ago.
That's what I said! If you can call mprotect you could probably call mmap and create a new page entirely
if you've never had a 'lightsaber' fight with about 7 expo markers stuck together, you haven't lived brother
Boo for clickbait title but solid video that’s super interesting as always.
0:59 - Firefox RIP in peace
It's funny that a week ago, I hadn't even heard of Yubikey. Then, 3 days ago I got a new laptop from my employer with a USB Yubikey plugged in, and now, all of the sudden, we also have video featuring a Yubikey 😁
Of all the system that I've broken into, I've never used memory corruption, just people corruption.
1:01 No, Chromium is *NOT* the basis for all the browsers on the internet. For most, sadly, it is, but not all. Firefox and Safari still have their own rendering engine.
Embedded boy here. Have you ever heard about writing past the canary ? Alto this is a nice feature that will decrease the attack vector we're not out of the woods yet.
On of the biggest problems is mixing data with program.
Firefox: *exists*
LowLevel: I'm about to end this man's whole career
"... makes hacking IMPOSSIBLE" ... famous last words.
awesome primer on memory corruption! ❤
Such an interesting history, please consider doing a deep dive on memory vulnerabilities. Learnt a lot 🙂
This title sounds more like a challenge than a statement
Don't so loosely say that chromium is the basis for all browsers. We shouldn't even joke about lack of variety
This sponsored segment contains one of the only products shilled by a youtuber I actually want to buy
yeah, I liked the way it was incorporated into the rest of the content with examples too!
Quite the clickbait headline. Does not seem all that useful, Intel CET is a much more effective mitigation without the downsides of mseal.
I perfectly agree, the only advantage to this is that it doesn't need hardware support, but you can achieve this kind of protection with seccomp rules
Is it like... memory safety for C? Nooo....
Nice! You caused me to have an epiphany - That moment where the overflow refuses to crash and gives control to a hacker's program. That makes so much sense to me :) thanks
crashing is bad, it should only occur when something impossible for the computer to do or continue doing. low level control allows you to do almost anything with memory. Security is tricky because the computer can't guess what you expect to happen. that is why you setup the rules yourself when dealing with low level code. otherwise use something like rust for the attempts at automating the rules for you as most use cases don't need to be that free with how to handle memory.
Great info. I teach things like PIE/NX/ASLR overrides (and more) to masters students. So seeing the base overflow concepts iterated here is gold
Jeff Xu can't fix shared buffers in Chromium, but he can't prevent buffer overflows? Yeah, right...
Bro. Where were you in elementary school????????
no way, saying that Chromium browser is the basis of all browsers on the internet is not only wrong. But also delusional.
It's the basis of all browsers that people actually use
I've used Chromium browsers for years but have grown tired of poor integration with my desktop. I recently discovered Zen Browser, and I'm actually quite enjoying it. I'm also watching the development of Ladybird browser with great interest. We need more diversity and competition back in the browser market.
Nerds don't realize that an astonishing percent of people use whatever is default. 90+% of all Android traffic is through stock browser aka chromium. As in, 90+% of Android users never install any other browser. At all. Ever.
It's most, I think the second non-Chromium based browser is Safari.
Can't trust this video based on that alone. Been looking through the comments for the tldr but can't find it
0:32 All the hackers from thousands of years ago were using this method too, so you were correct.
"Memory corruption has been responsible for 70% of hacks in the last 20 years"
Do you have a source for that? Are you talking about the google and Microsoft study of 2017 (I think?)?
I'm sceptical as well. I want to know the definition of 'Hacks' being used.
I was told the nr. 1 vulnerability was always social engineering related.
Well drivers are the primary way to get a rootkit functioning with these complex A/V system. The main way to enable this is attach to a firmware level driver and overflow and break the services associated then move on from there.
It's not that 70% of hacks are caused by memory corruption, but 70% of CVEs are a consequence of it.
Wow, that title is some serious grade-A click bait!! Nice job!
Im sorry if this is a stupid question, but whats the difference between a yubi key and storing the ssh key encrypted on a normal usb drive?
the yubikey has cryptography hardware to encrypt your ssh key and do the authentication of the public key with the key never leaving the yubi key itself. A normal USB drive would have to copy the private key to the computer's RAM, thus exposing it.
@@monad_tcp but he says that it downloads the ssh key locally
@@godofpotatos4691 yes, but only if you want to download it locally (i.e. if you manually execute that command from the video). Normally you don't do that, since it's considered insecure.
You want to let the Yubi key do its own thing
I misspoke here, you don't actually get the key, you get a derived Private Key that associates to the credential in the Yubikey.
His implementation is even worse than storing the key temporarily in RAM. He's storing it to disk each time he wants to use it, nullifying the reason to even have a Yubikey or smart-card in the first place.
At the very least, if a security program, service, or framework supported the Yubikey/smart-card, it could store the key in protected RAM and securely communicate with the Yubikey/smart-card in a way that doesn't require the program programmers or user that needs it to be an expert in cryptography, in order to prevent side-channel attacks. But, the way he does it is terrible.
Haven't we learned by now that calling something unhackable is just begging someone out there to crack something just to prove you wrong lmao
Also I think it's very debatable that memory corruption is the "#1 cause" when so many prominent hacks lately have been due to social engineering.
Yes I know memory corruption is still common and abused a lot, I just don't think it's fair to say it's #1
Its not unhackable, but if i understood the feature correctly, then it will be a pain in the ass for hackers to get around if it becomes widely used. Also the thing is, we cant really fight against social engineering. People will always keep clicking on links and will always post everything they can about their life online, so we cant do much about that. I would guess aside from social engineering, memory corruption has got to be one of the top 3 at least
If most hacks are done with social engineering, then wouldn't that make Windows just as secure as Linux?
@@SergeantExtremeno for a few reasons
- microsoft goes out of its way to make its users tech-illiterate
- windows loves showing dialogs all the time that people will learn to click away without reading (nothing to do with linux vs dos, but the de and the culture should be considered too)
- windows encourages running as admin, which most linux distros don't
- windows comes with lots of juicy telemetry data ready for the successful attacker (recall is a particularly egregious example), which most linux distros don't collect
Linux is just as easy to leave a port open, windows automatically handles a lot of measures automatically whereas with Linux you have the sole responsibility of securing and ensuring good security practices
@@yjlom 1. I could argue the same about Linux. A great example is the push to force users to download and install software only from "stores". When I complained about this in the distro forums, I was told that installing software from outside of stores was a "power user" move, and it's something a regular person shouldn't be doing. You can't get more tech illiterate than that.
2. Windows doesn't encourage running as admin with the exception of highly specialized software such as anti-virus, data recovery software, and driver software.
3. I don't necessarily agree that Windows shows a lot of dialogs. For the most part, pop ups only occur if something goes wrong. This is especially true in this day and age.
4. Although, I do agree with your point on telemetry.
Love your stuff man!
I’m learning low level programming from a guy who just figured out expo caps click on the end. You never stacked expos in school?
Love your content by the way, it’s some of the best.
Oh, linux caught up to what openBSD has had for 14 years now. Cool. but it being on linux means it's a trash security feature that's going to be forgotten about in 3 years
BSD had a first version this from 2022. Linux made its own version in 2023 with some extra features. After a year, changes on both systems end up being very similar solutions.
(THat's not 14 years)
@@framegrace1 OpenBSD introduced write-or-execute (W^X) about 2002. procmap -a will show what flags a process has on what regions.
It's not *exactly* what has been in OpenBSD for yonks, but I'd bet the idea comes from OpenBSD's work, it was implemented there first. What is really galling is the Power architecture has stuff like access ordering (PROT_SAO) since kernel 2.6 that Intel/AMD world still without AFAIK.
There was a time when computing resources were so scarce that memory that was both writable and executable was a feature. "Self-Modifying code" as it was called back then was always black magic, but it could do amazing things. It's obvious though that in the modern world we live in security is way more important than this level of code optimization and I'm glad to see it finally fall by the wayside.
For reasons I can't really explain, the "trick" about putting the marker cap on the back made me laugh hard. It evokes this image of a whole cohorte of young people not knowing about things like phones with rotary dials, modems and cassette tape recorders anymore. Yes, there are amazing things in the real, physical world out there! Like stackable markers.
aah this is a case , where protection will need protection XD
Linus has already had to yell at kernel devs that they can't just ignore this.
More ads like this please! Maybe an ad-only video about the yubi key(s)?
bro is looking afraid at tux on the thumbnail because he knows he cant commit war crimes on our computers anymore
Memory corruption on hospital computer: war-crime
Peeking memory for cheats: even bigger war-crime
In school we would make swords out of a bunch of dry erase markers. When your sword broke you lost.
Thank God that's not an irony about another piece of news about the kernel
I enjoyed writing self-modifying machine code back in the days.
"A bunch of different flags"...the flags: "reserved for future use"
Let's see how well this title ages. I'll wait.
when I was in gradeschool, I'd connect a bunch of those markers together by using the cap connection thing that you mentioned in the video and make a "sword."
obviously when I hit something, it all shattered, but it was very fun :3
Now watch right after he said it makes it unhackable linux will get hacked. probably within the next month.
My question is, why don't they fix the programs that are buggy instead of a bandaid to get around that buggy software/code? This would be FAR more efficient.
His videos making me to love low level programming
If there is one thing to be aware about, its the attacker will be more creative everytime.
Out to everyone who learned about the cap trick in kindergarten, we got one.
Holy sh!t. That works for my whiteboard marker. You have blown my mind already, sir.
"If you don't know assembly, don't worry, I'll explain exactly what's going on here"
Me: .......
Man unlocks gigabrain pen swords in realtime- shown live as a master baiter
Cool Video!!
What Font is it that you use?
The V8 Engine...
why does the V8 need so much sandboxing ? why can't them fix their JIT compiler not to generate insecure code like the JVM does ?
@@monad_tcp probably because no one runs actively malicious code on the jvm? v8 needs to be protected against everything
@@monad_tcpJVM is not secure at all. Remember log4j? It is not used as much as V8 not even close.
Early web days of arbitrary code injection and execuction from pc to pc is the reason
lol gotta make sure those XmlHttpRequests you arbitrarily let any domain make are secure
Seems like a logical inclusion. It's analogous to a topic from the legal world, regarding Trusts. Revocable Trusts always are vulnerable to being changed, much like a program with memory vulnerability can be altered so as to do something beyond what its designers or users intend. So there exist Irrevocable Trusts, which sacrifice the ability to make on-the-fly changes to the Trust (which might serve to legitimately advance its goals) in exchange for the increased certainty that its terms and holdings will remain unmodified. It honestly seems a little weird that there hasn't been such a feature until now, as that whole schema depends on having access both sides of that tradeoff.
not only you can put the buffer size with scanf via the string formatter, the compiler is smart enough to detect if the size provided to scanf is too big
Here is a curious challenge i don't see people commenting on, try making a "vulnerable C program" that compiles using security features of Clang or GCC.
OpenBSD users rise 🍷🗿
LowLevel explaining a Bufferoverflow challenge
“return oriented programming “? So the INTERCAL designer *did* know stuff we did not imagine: they did put the COME FROM instruction in the language.
Markers are literally designed to do that.
Wait until he finds out you can create a marker lightsaber out of like 5 of those bad boys
So for that scanf("%32s, &buffer); // that would prevent buffer overflow right? use %32s
The only way to make the title happen is to remove you, the user.
Goodbye, Mr. Anderson.
For thousands of years… Ladders were high tech ways to break in.
I had to look up and confirm that firefox wasn't built on top of chromium real quick
Someone has clearly never made an Expo marker sword...
Hot take: If the stack architecture was itself split into two distinct regions -- one to hold all your typical stack variables, and the other to separately hold the return addressed needed by the cpu for proper call/returns (maybe even hold the latter in a cpu register/cache) -- then memory corruption with code execution hacks would ALREADY be (almost) impossible.
It wouldn't completely stop the problem and would not prevent heap corruption
Great content man keep it up! I don't know how many PPL are suckers for this content but I sure am
preaching to the choir, I already have 2 Yubikeys
wait until he finds out you can stack the markers
Could you not be so clickbaity? Could you put at least the name of the feature in the title or in the thumbnail, please?
wow I feel so clickbaited. I clicked the video specifically to see that red and black cardigan sweater you had on in the thumbnail 😥
LowLevel : Linus is very passionate
Linus on this patch discussion: Stop this. I do not want to hear your excuses for garbage any more.
We're done. If I hear any more arguments for this sh*t, I will
literally put you in my ignore file, and will auto-NAK any future
patches.
Here's something else to learn today: Putting the cap on the back of a writing instrument (marker, pen) is called *posting.* (Really)