<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Sandstorm.io Blog</title>
		<description>Latest updates on Sandstorm.io</description>		
		<link>https://sandstorm.io</link>
		<atom:link href="/feed.xml" rel="self" type="application/rss+xml" />
		
			<item>
				<title>We&#39;re changing the way identities work</title>
				<description>&lt;p&gt;Over the next few weeks, I’ll be making a major change to the way Sandstorm handles user accounts and identities. My goal is to make things far less confusing.&lt;/p&gt;

&lt;p&gt;Most Sandstorm users probably have no idea that these features exist, and so won’t notice the change. However, if you’ve linked multiple “identities” (multiple e-mail, Google, or GitHub accounts) to your Sandstorm account, you may want to read this.&lt;/p&gt;

&lt;h3 id=&quot;history-the-current-system-and-why-it-was-built-this-way&quot;&gt;History: The current system and why it was built this way&lt;/h3&gt;

&lt;p&gt;Way back in late 2015, we introduced the concept of “multiple identities” in Sandstorm. Ever since, a user account on a Sandstorm server has been able to have multiple identities attached to it, each with a different profile (name, picture, etc.). Once a user has multiple identities, they can choose which identity to act as when using apps. When users share with each other, they often do so “by identity”, meaning you choose the identity (not the account) with whom you want to share. It’s even possible for multiple accounts to share a common identity, in order to have multiple people “acting as” the same persona.&lt;/p&gt;

&lt;p&gt;When we designed this system, we were attempting to solve several different problems at once:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;We had long offered users the ability to log in with Google, GitHub, or e-mail. Sometimes, though, people wanted to attach multiple login mechanisms to the same account, e.g. both their Google and their GitHub account. This redundancy can protect people against one of these services being down, and would help avoid confusion when people can’t remember which login mechanism they used last time. We also anticipated that in the future, Sandstorm apps might want to talk to Google and GitHub APIs, and this access would be authenticated through the user’s connected accounts.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;We wanted to ensure that the user ID seen by an app was a global identifier – meaning it would be the same even if the app was moved to a different Sandstorm server. This required that the ID be derived from the user’s credentials, e.g. a hash of their Google or GitHub user ID.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;When users share with each other, we wanted them to be able to do so using well-known public identifiers, for additional security. Typically, Sandstorm users share with each other by creating and sending “secret links”; anyone who receives the link can get access. This is convenient, but sometimes you want some additional assurance that a link can’t be leaked. In that case, you might want to specify a specific GitHub username or Google account e-mail address with whom to share, and have Sandstorm guarantee that the receiver must authenticate as that identity to open the link.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;We wanted people to be able to manage multiple “personas” with which they interact with other users within Sandstorm. We imagined that users may in fact want to prevent other users from discovering that these personas belonged to the same physical person. We imagined that this would in particular be useful to groups who fear harassment and abuse, and therefore choose to interact under a pseudonym.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;We wanted multiple users to be able to collectively manage a shared persona, like a “brand account” on Twitter, while keeping independent Sandstorm accounts.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;With all of these goals mashed together, we came up with a design: We would allow you to connect multiple credentials (e.g. Google, GitHub, e-mail, even multiple of each) to your account. Each connected credential became an “identity”, with its own profile (name, picture, and other details shown to users you collaborate with). Each identity could also be marked as being for authentication (in which case you could use it to log into your account) or not (in which case you couldn’t use it to log in, but you could use it as a persona and a sharing target). Non-login identities could also be shared between multiple accounts. Whenever you interacted with a grain, you would choose which identity you wanted to act as, which determined how collaborators saw you.&lt;/p&gt;

&lt;h3 id=&quot;why-it-didnt-work&quot;&gt;Why it didn’t work&lt;/h3&gt;

&lt;p&gt;In retrospect, it was a mistake to try to solve all of these problems at the same time, as they are all fundamentally different. By trying to link them together, we largely failed to solve any of them.&lt;/p&gt;

&lt;p&gt;The idea that your Google and GitHub accounts each represented a different “identity” confused many users. Most people in fact only have one persona, and their accounts on various services represent that same persona. But if you attached both to your Sandstorm account, then Sandstorm would begin asking you to choose which identity you wished to act as – a question that made no sense to most people. Moreover, other people, when sharing with you, would begin to see multiple “copies” of you showing up in their contacts list – one for each credential. Often it was hard for people to tell what the difference was or which they should choose. Because of this confusion, the Sandstorm team has tended to steer people away from linking multiple identities in the first place. Obviously, this defeats the goals for which multi-identity was created.&lt;/p&gt;

&lt;p&gt;Meanwhile, for people who actually wanted to manage multiple personas – pseudonyms, brand identities, etc. – we never managed to provide a good experience. It was very easy to accidentally use the wrong identity and reveal yourself. At the same time, the need to support this use case often exacerbated the confusion for users who only had one logical persona (as described in the previous paragraph). Without this design constraint, we could make a better UX for most people.&lt;/p&gt;

&lt;p&gt;Finally, in practice this design didn’t really solve the ability to move grains between Sandstorm servers, because different Sandstorm servers may very well use totally different login mechanisms. Often, people want to transition grains from Oasis – where they used e-mail login – to a new self-hosted server – where they used LDAP or SAML login. Since the login mechanisms differed, user IDs didn’t match up anyway. To really solve this problem, we need something more dynamic.&lt;/p&gt;

&lt;h3 id=&quot;what-were-doing-instead&quot;&gt;What we’re doing instead&lt;/h3&gt;

&lt;p&gt;We are dropping support for multiple “personas”. Going forward, each Sandstorm account will have only one profile – one name, one profile picture, one entry in the sharing auto-complete list, etc. If you have multiple identities today, the profile from exactly one of those identities will become your account profile, and the other profiles will disappear. If you’re worried about which one Sandstorm will take, make sure to edit all your identities so that their profiles are the same.&lt;/p&gt;

&lt;p&gt;What we call “identities” today will be renamed to “credentials”. A credential will no longer have its own profile, and you will no longer need to choose which credential you are acting as when accessing grains. Authentication-related features of credentials (for login, and for secure sharing) will remain mostly intact.&lt;/p&gt;

&lt;p&gt;Users who rely on the ability to manage multiple personas today will need to transition to using multiple accounts instead. I suspect that there are vanishingly few such users, as most users never understood Sandstorm’s identity system in the first place. That said, if you are affected, I apologize. I would love it if you would &lt;a href=&quot;/community&quot;&gt;get in contact with us&lt;/a&gt; to let us know about your specific needs, so that we can try to design a better experience for you. (For what it’s worth, I personally recommend using the multi-profile feature provided by various browsers to separate your personas into totally separate browser contexts with different window themes – this makes it much easier to prevent accidental leakage.)&lt;/p&gt;

&lt;p&gt;Finally, we will be disassociating the user ID as seen by apps from the underlying user credentials. In the future, each grain will actually see a totally unique ID for each user. When a grain is transferred between servers, the owner will have the opportunity to remap users in arbitrary ways – though by default we’ll correlate based on verified e-mail address. This scheme has the additional benefit that because a particular user’s ID will be different in every grain they access, it will no longer be possible for apps to illicitly identify and correlate users by their IDs. Instead, they will have to use explicit APIs for this purpose, which can be carefully controlled for privacy.&lt;/p&gt;

&lt;h3 id=&quot;timeline&quot;&gt;Timeline&lt;/h3&gt;

&lt;p&gt;As of this post, these changes have not yet been implemented. We wanted to let people know of the changes in advance, in case anyone is relying on the current behavior. The next Sandstorm update will include code which detects users who might be affected and notifies them to read this blog post. The full change will probably take several weeks or maybe months to implement, as it is a huge change. We’ll update this post when it’s done.&lt;/p&gt;
</description>
				<pubDate>Mon, 08 May 2017 00:00:00 -0700</pubDate>
                                <link>https://sandstorm.io/news/2017-05-08-refactoring-identities</link>
                                <guid isPermaLink="true">https://sandstorm.io/news/2017-05-08-refactoring-identities</guid>
			</item>
		
			<item>
				<title>The Sandstorm Team is joining Cloudflare</title>
				<description>&lt;p&gt;Recently, we announced that &lt;a href=&quot;https://sandstorm.io/news/2017-02-06-sandstorm-returning-to-community-roots&quot;&gt;Sandstorm is returning to its community roots&lt;/a&gt;, transitioning away from being a for-profit startup and towards being a community-effort, open source project. The Sandstorm team is committed to keep building Sandstorm in collaboration with our amazing community, and we will keep operating Sandstorm Oasis as a service. But, Sandstorm will no longer be our full-time jobs.&lt;/p&gt;

&lt;p&gt;So, what will be?&lt;/p&gt;

&lt;p&gt;Starting today, most of the Sandstorm team – including Jade and myself – now work for Cloudflare.&lt;/p&gt;

&lt;p&gt;Sandstorm has actually been a user of Cloudflare since the beginning. Our web site and static parts of Oasis are served through them. I’ve long been a fan of Cloudflare’s focus on security. A few years back, I enjoyed their &lt;a href=&quot;https://blog.cloudflare.com/answering-the-critical-question-can-you-get-private-ssl-keys-using-heartbleed/&quot;&gt;Heartbleed Challenge&lt;/a&gt; which proved conclusively that, yes, private keys can be leaked by Heartbleed. Although Cloudflare recently suffered from &lt;a href=&quot;https://blog.cloudflare.com/incident-report-on-memory-leak-caused-by-cloudflare-parser-bug/&quot;&gt;a widely-reported security incident&lt;/a&gt;, their response was impressively fast and transparent.&lt;/p&gt;

&lt;p&gt;But a bigger reason I’m excited about joining Cloudflare is that they are big users – perhaps the biggest users – of &lt;a href=&quot;https://capnproto.org&quot;&gt;Cap’n Proto&lt;/a&gt;, the serialization and RPC framework developed by Sandstorm. Cloudflare actually &lt;a href=&quot;https://blog.cloudflare.com/introducing-lua-capnproto-better-serialization-in-lua/&quot;&gt;developed the Lua bindings for Cap’n Proto&lt;/a&gt; and has &lt;a href=&quot;http://www.thedotpost.com/2015/06/john-graham-cumming-i-got-10-trillion-problems-but-logging-aint-one&quot;&gt;spoken publicly about using Cap’n Proto in their logging pipeline&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Sandstorm, for its part, remains an independent entity, and I won’t be working on it during my day job at Cloudflare. However, I will be working on Cap’n Proto. This should be good news for Cap’n Proto fans who have been disappointed by the lack of releases lately. Although Sandstorm uses Cap’n Proto extensively, in our scramble to build Sandstorm we tended to commit changes only to git master while neglecting to build (and test) formal releases. With a larger corporate backer, we can now afford to be more professional, doing more frequent releases, and putting effort into supporting more languages and platforms.&lt;/p&gt;

&lt;p&gt;I will also be working on building some fascinating new infrastructure at Cloudflare. As a member of the edge platform team, I’ll be coming up with new ways to utilize Cloudflare’s machines located in over a hundred data centers around the world. Jade, meanwhile, will be working on building out Cloudflare’s community and developer advocacy program.&lt;/p&gt;

&lt;p&gt;The Sandstorm community can expect to see me merging pull requests and pushing releases on weekends, with new releases at least every three weeks. There has been a flurry of activity lately around mobilizing community contributions. Join the discussion on &lt;a href=&quot;https://groups.google.com/forum/#!forum/sandstorm-dev&quot;&gt;the sandstorm-dev mailing list&lt;/a&gt; or on &lt;a href=&quot;https://kiwiirc.com/client/irc.freenode.net/?channel=#sandstorm&quot;&gt;IRC (#sandstorm on Freenode)&lt;/a&gt;!&lt;/p&gt;
</description>
				<pubDate>Mon, 13 Mar 2017 00:00:00 -0700</pubDate>
                                <link>https://sandstorm.io/news/2017-03-13-joining-cloudflare</link>
                                <guid isPermaLink="true">https://sandstorm.io/news/2017-03-13-joining-cloudflare</guid>
			</item>
		
			<item>
				<title>Sandstorm gets a security review</title>
				<description>&lt;p&gt;Sandstorm recently underwent a security review by &lt;a href=&quot;http://devco.re/&quot;&gt;DevCore Inc.&lt;/a&gt;, commissioned by Department of Cyber Security of Taiwan. The company has in the past found RCEs in big-name services like &lt;a href=&quot;https://hackerone.com/reports/125980&quot;&gt;Uber&lt;/a&gt; and &lt;a href=&quot;http://devco.re/blog/2016/04/21/how-I-hacked-facebook-and-found-someones-backdoor-script-eng-ver/&quot;&gt;Facebook&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Although the full report is not public (and is not in English), Taiwan’s Digital Minister, &lt;a href=&quot;https://en.wikipedia.org/wiki/Audrey_Tang&quot;&gt;Audrey Tang&lt;/a&gt;, tells us that overall DevCore feels Sandstorm has “excellent security design.”&lt;/p&gt;

&lt;p&gt;As would be expected of any good security review, DevCore did find several issues. Last night we released build 0.203 to fix them. All servers should automatically update within 24 hours of the release (by midnight tonight, PST), but if you’d like to speed up the process (or if you have disabled automatic updates), you can SSH into your server now and type:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo sandstorm update
&lt;/code&gt;&lt;/pre&gt;

&lt;h3 id=&quot;vulnerabilities-discovered-and-fixed&quot;&gt;Vulnerabilities Discovered (and fixed)&lt;/h3&gt;

&lt;h4 id=&quot;insufficient-e-mail-address-validation&quot;&gt;1. Insufficient e-mail address validation&lt;/h4&gt;

&lt;p&gt;When logging in with an e-mail address, a user could enter an address like “foo@evil.com,bar@example.com”. In this case, login e-mails would be sent to &lt;em&gt;both&lt;/em&gt; addresses, while Sandstorm would treat the user as if they were a member of the latter domain, “example.com”. Hence, an attacker could specify their real address as the first address and a fake address at a domain of their choice as the second, in order to appear to be a member of the domain. Servers that use Sandstorm’s organizational features (until recently only available as part of the &lt;a href=&quot;https://sandstorm.io/news/2017-02-06-sandstorm-returning-to-community-roots&quot;&gt;now-defunct&lt;/a&gt; product “Sandstorm for Work”) can be configured to automatically promote members of a domain to full users, allowing them to install apps, create grains, and discover the identities of other members of the organization. Such users would &lt;strong&gt;not&lt;/strong&gt; receive access to any other grains on the server, but an attacker could install their own apps that consume the server’s resources, including CPU, RAM, and disk. An attacker could also combine this vulnerability with one of the others below, all of which require full user status as a starting point.&lt;/p&gt;

&lt;p&gt;The root cause of this bug is Sandstorm’s use of a library called Nodemailer to send e-mail. It turns out that Nodemailer “helpfully” interprets comma-separated lists of addresses as multiple addresses. This is true even if the string is already part of an array. For instance, say you pass the following array in the &lt;code&gt;to&lt;/code&gt; field of a mail sent via Nodemailer:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;[ &quot;foo@example.com&quot;,
  &quot;bar@example.com,baz@example.com&quot;,
  { name: &quot;Garply&quot;, address: &quot;qux@example.com,corge@example.com&quot; } ]
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Surprisingly, this three-element array will send e-mail to &lt;em&gt;five&lt;/em&gt; addresses – foo@, bar@, baz@, qux@, and corge@.&lt;/p&gt;

&lt;p&gt;We did not anticipate this feature and assumed that Nodemailer would fail to send e-mail to an invalid address.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Moderate &lt;strong&gt;if&lt;/strong&gt; Sandstorm is configured with an organization defined by e-mail domain. If you do not define an organization, or if you define it by LDAP, SAML, or G Suite domain, then we do not believe this bug can be meaningfully exploited.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Sandstorm now performs its own validation of addresses to ensure, among other things, that no separator characters are accepted and only one @-sign is allowed. Fixed in commit &lt;a href=&quot;https://github.com/sandstorm-io/sandstorm/commit/37bd9a7f4eb776cdc2d3615f0bfea1254b66f59d&quot;&gt;37bd9a7&lt;/a&gt;.&lt;/p&gt;

&lt;h4 id=&quot;insufficient-path-validation-when-building-zip-backups&quot;&gt;2. Insufficient path validation when building ZIP backups&lt;/h4&gt;

&lt;p&gt;The owner of a Sandstorm grain can download a backup of the grain’s content in ZIP format. Sandstorm shells out to the &lt;code&gt;zip&lt;/code&gt; utility to build this archive, but does so inside a sandbox designed to prevent exploitation of bugs in the utility.&lt;/p&gt;

&lt;p&gt;Unfortunately, a combination of factors resulted in the possibility of a minor data leak:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;The list of files to include in the archive is passed to &lt;code&gt;zip&lt;/code&gt; on standard input, delimited by newlines. However, it is possible for a filename to contain a newline character. Sandstorm actually checked for this, but accidentally failed to perform the check in one code path triggered by the existence of an empty directory.&lt;/li&gt;
  &lt;li&gt;The zip sandbox carefully hid sensitive directories like &lt;code&gt;/var&lt;/code&gt;, &lt;code&gt;/proc&lt;/code&gt;, and even &lt;code&gt;/etc&lt;/code&gt;. However, after the zip sandbox was written, two new directories, &lt;code&gt;/etc.host&lt;/code&gt; and &lt;code&gt;/run.host&lt;/code&gt;, which are aliases for the host system’s &lt;code&gt;/etc&lt;/code&gt; and &lt;code&gt;/run&lt;/code&gt;, were added. Unfortunately, the zip sandbox was not updated to hide these directories, hence they were visible to the zip program.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As a result of this, a user could create a grain containing an empty directory named &lt;code&gt;/var/blah\n/etc.host/passwd&lt;/code&gt;, save a backup, and find the backup contained a copy of the host’s &lt;code&gt;/etc/passwd&lt;/code&gt; file (which, despite its name, does not contain passwords, but does contain a list of local user accounts).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Severity:&lt;/strong&gt; Low. An attacker who has full user status (permission to create grains) can read files located in the server’s &lt;code&gt;/etc&lt;/code&gt; and &lt;code&gt;/run&lt;/code&gt; directories that are set world-readable (or specifically readable to the Sandstorm service account). No other host system directories are exposed. Usually, any files under &lt;code&gt;/etc&lt;/code&gt; that contain sensitive secrets would be hidden from all users except root, hence would not be readable by Sandstorm nor by the attacker.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; We have fixed the validation of filenames so that newlines are never permitted, and we have enhanced the zip sandbox to use a whitelist of top-level directories rather than a blacklist. Fixed in commits &lt;a href=&quot;https://github.com/sandstorm-io/sandstorm/commit/4ea8df7403381d9b657b121b3c98d8081b27414d&quot;&gt;4ea8df7&lt;/a&gt; and &lt;a href=&quot;https://github.com/sandstorm-io/sandstorm/commit/6e8572ea8bb56d0216bb1b410e5040edc051b120&quot;&gt;6e8572e&lt;/a&gt;.&lt;/p&gt;

&lt;h4 id=&quot;server-side-request-forgery&quot;&gt;3. Server-side request forgery&lt;/h4&gt;

&lt;p&gt;Apps running on Sandstorm can make outgoing HTTP requests through a few mechanisms. Additionally, users can instruct Sandstorm to download an app package file from an arbitrary URL. Sandstorm did not attempt to prevent these requests from reaching localhost or private network destinations. Because of this, a full user of the Sandstorm server (but not a visitor) could probe the internal network on which the Sandstorm server was hosted, as well as services exposed to localhost on the server itself.&lt;/p&gt;

&lt;p&gt;This is a problem if unprotected services are exposed to the Sandstorm server &lt;em&gt;and&lt;/em&gt; you have invited users to your server who should not be trusted to access those services. Sandstorm itself does not expose any unprotected services to localhost, so some other service must be running locally to cause a problem. Only HTTP requests are possible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Severity:&lt;/strong&gt; High &lt;strong&gt;if&lt;/strong&gt; unprotected HTTP services are visible to the Sandstorm server &lt;em&gt;and&lt;/em&gt; you have invited users to your server who should not be trusted to access those services. Otherwise, low. Sandstorm itself does not expose any unprotected services to localhost, so some other service must be running locally to cause a problem. Only HTTP requests are possible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Sandstorm now allows the server admin to configure an IP address blacklist. User-initiated requests will not be allowed from these addresses. By default, standard private network address ranges are blacklisted. Annoyingly, this “fix” is likely to break some servers who use private app indexes, but avoiding such breakage would mean leaving others vulnerable. Admins will need to update their blacklists accordingly. Fixed in commit &lt;a href=&quot;https://github.com/sandstorm-io/sandstorm/commit/164997fb958effbc90c5328c166706280a84aaa1&quot;&gt;164997f&lt;/a&gt;.&lt;/p&gt;

&lt;h4 id=&quot;failure-to-mitigate-linux-kernel-cve-2017-6074&quot;&gt;4. Failure to mitigate Linux kernel CVE-2017-6074&lt;/h4&gt;

&lt;p&gt;&lt;em&gt;(This was caught by Sandstorm core developer &lt;a href=&quot;https://github.com/dwrensha&quot;&gt;David Renshaw&lt;/a&gt;, not by DevCore, but is fixed in the same release.)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A recent Linux kernel bug could allow a malicious app to cause a kernel panic or perhaps break out of its sandbox. The bug is in Linux, but Sandstorm aims to protect against such bugs via seccomp. &lt;a href=&quot;https://docs.sandstorm.io/en/latest/using/security-non-events/#linux-kernel&quot;&gt;Historically, Sandstorm’s sandbox has been very successful at blocking Linux vulnerabilities before they are discovered.&lt;/a&gt; However, this one slipped through. On Sandstorm, the published PoC exploit for this bug only causes a kernel panic (not a sandbox breakout), but a developer with deep understanding of the bug and the Linux kernel might be able to create a successful attack in other ways.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Severity:&lt;/strong&gt; High if you permit users you don’t trust to install apps on your server, or commonly install apps from untrustworthy sources, and you do not keep your kernel up-to-date.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Sandstorm’s seccomp filter has been updated to prohibit the creation of DCCP sockets. Fixed in commit &lt;a href=&quot;https://github.com/sandstorm-io/sandstorm/commit/34749f9c0141a89680860b15433e8ac9dbdbbb62&quot;&gt;34749f9&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h3&gt;

&lt;p&gt;We are excited to have received such a thorough security review. Some of the problems discovered were very obscure and we’re impressed that DevCore was able to find them. We thank Audrey Tang and the Department of Cyber Security of Taiwan for commissioning this review.&lt;/p&gt;
</description>
				<pubDate>Thu, 02 Mar 2017 00:00:00 -0800</pubDate>
                                <link>https://sandstorm.io/news/2017-03-02-security-review</link>
                                <guid isPermaLink="true">https://sandstorm.io/news/2017-03-02-security-review</guid>
			</item>
		
			<item>
				<title>Impact of Cloudflare security advisory on Sandstorm Oasis</title>
				<description>&lt;p&gt;A few days ago, Cloudflare &lt;a href=&quot;https://blog.cloudflare.com/incident-report-on-memory-leak-caused-by-cloudflare-parser-bug/&quot;&gt;disclosed a security bug&lt;/a&gt; in their services which may have leaked secrets from sites which use Cloudflare. Sandstorm uses Cloudflare as a cache in front of our web site and Sandstorm Oasis, and so some of our users have asked if this problem affects them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; If you uploaded or downloaded a grain backup (zip file) between September 22, 2016 and February 18, 2017 (more so between Feb 13 to Feb 18), there is a very remote chance that some portion of the content of your backup could have been leaked to a third party, due to a bug in Cloudflare. We suspect, but cannot say for sure, that no such leakage occurred. We believe that no data other than grain backups could have leaked.&lt;/p&gt;

&lt;h3 id=&quot;details&quot;&gt;Details&lt;/h3&gt;

&lt;p&gt;We believe that Sandstorm services are mostly unaffected (with the exception of grain backups, described below). We intentionally divide our services such that public, static content is served from different hosts from dynamic/private content. We only enable Cloudflare in front of the public, static content (to provide caching and faster delivery). Moreover, the public, static hosts avoid storing sensitive credentials in cookies.&lt;/p&gt;

&lt;p&gt;Specifically, we have Cloudflare enabled on the following hosts:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;sandstorm.io&lt;/strong&gt;, which serves our public web site. There are no secrets here.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;docs.sandstorm.io&lt;/strong&gt;, which serves our public documentation. There are no secrets here.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;dl.sandstorm.io&lt;/strong&gt;, from which Sandstorm install packages and updates are served. There are no secrets here.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;oasis.sandstorm.io&lt;/strong&gt;, which serves the static HTML, Javascript, CSS, and images for Sandstorm Oasis. Dynamic content in the Sandstorm UI is delivered – and user actions are communicated – via a WebSocket on ddp.oasis.sandstorm.io, which does not use Cloudflare. The user’s authentication token is stored in localStorage rather than a cookie and is only ever transmitted over the WebSocket. Sandstorm apps are served from randomly-generated subdomains of oasis.sandstorm.io, which are not served through Cloudflare. However, grain backup uploads and downloads occur on the main host and could be affected – see below.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;app-index.sandstorm.io&lt;/strong&gt;, which serves public Sandstorm app packages and metadata for use by the app market and for implementing automatic updates. There are no secrets here.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;apps.sandstorm.io&lt;/strong&gt;, which serves the static HTML, Javascript, CSS, and images for our app market. As with Oasis, dynamic content and interaction (mainly, reading/posting reviews) happens via a WebSocket on apps-ddp.sandstorm.io and credentials are stored in localStorage.&lt;/li&gt;
  &lt;li&gt;Various internal testing hosts and hosts that only redirect to other hosts.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We chose this design because we rely on Cloudflare only for caching purposes. Since dynamic data cannot be cached anyway, it made sense to form direct connections for that data rather than pass through a proxy, both to reduce our TCB and to improve performance. On the other hand, this means we cannot fully take advantage of Cloudflare’s security features such as its Web Application Firewall and DDoS protection, but we felt comfortable with this trade-off.&lt;/p&gt;

&lt;p&gt;That said, we’ve identified one notable exception to our design: When you download a backup of a grain via the Sandstorm Oasis UI, or upload a backup to be restored, the zip file is transmitted through the main Oasis host, proxied through Cloudflare. This seems to be an oversight; it would make sense for these requests to go through the DDP host (I’ve prepared &lt;a href=&quot;https://github.com/sandstorm-io/sandstorm/pull/2877&quot;&gt;a pull request&lt;/a&gt; to fix this). These transfers are authorized via short-lived tokens, so there’s no risk of Oasis credentials being leaked. However, the contents of a .zip file could possibly have been leaked by Cloudflare.&lt;/p&gt;

&lt;p&gt;Cloudflare reports that the bug existed between 2016-09-22 and 2017-02-18, with the greatest potential impact being in the last four days of that period. If you uploaded or downloaded a grain backup in that time, it could have been leaked. However, Cloudflare reports that the incidence of such leaks was extremely small, and each instance would have leaked data from an essentially random website served by Cloudflare, of which there are many (Cloudflare handles some 10% of all internet traffic). Given the probabilities, it is likely that no Sandstorm grain backup data was actually leaked. There is also so far no evidence that anyone was actively exploiting this bug.&lt;/p&gt;

&lt;p&gt;With all that said, if you are worried about the possibility that your data was leaked, the proper course of action depends on the app and grain involved. Sandstorm is explicitly designed to keep credentials out of the hands of apps, so usually the only sensitive information in a grain backup is information that you gave to it yourself. For example, if you had an Etherpad document where you kept a list of passwords (and you downloaded a backup of that document recently), you may want to change those passwords. Otherwise, there is nothing to do.&lt;/p&gt;

&lt;h3 id=&quot;editorial&quot;&gt;Editorial&lt;/h3&gt;

&lt;p&gt;Bugs like this probably exist in a lot of software. The Cloudflare bug is notable because:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;It was discovered. (Most bugs aren’t.)&lt;/li&gt;
  &lt;li&gt;Cloudflare handles some 10% of all internet traffic, meaning that basically everyone on the internet is possibly affected.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It’s important to keep in mind that security is not binary. Security is about risk management. The Cloudflare bug did not change anyone’s security level from “secure” to “insecure” – instead, it increased the likelihood of any particular person becoming the victim of a real attack from, say, 5.26% to 5.28% (numbers made up to illustrate point). Had Cloudflare been slow to respond once the vulnerability was found, this risk may have shot up. Fortunately, though, they were anything but.&lt;/p&gt;

&lt;p&gt;Now, consider the use of password-based authentication. Nearly every service on the web uses it. However, it is demonstrably horribly insecure: Not only do people regularly use bad passwords or reuse the same password across sites, but passwords stored in a database (even if hashed) make it much easier for attackers to escalate a read-only database snapshot into full access privileges (possibly even to sites other than the one attacked). By requiring the user to receive an authentication code by e-mail each time they log in from a new location, a service can hugely reduce their users’ risk of compromise – probably by an order of magnitude! By this measure, bare password-based authentication should be considered a vulnerability, and a much more serious one than Cloudflare’s bug.&lt;/p&gt;

&lt;p&gt;And yet, people accept passwords because they are more convenient than other mechanisms. &lt;em&gt;(Well, many people do. Sandstorm does not implement passwords.)&lt;/em&gt; So, we admit that security is not absolute, but rather a trade-off which needs to be judged against other factors. We need to weigh the risks of our infrastructure being insecure against the value that infrastructure brings – and Cloudflare certainly brings a lot of value. That said, with good design, it’s often possible to reduce and contain risks without sacrificing too much utility. This is one of the core goals of Sandstorm – to introduce an &lt;a href=&quot;https://sandstorm.io/how-it-works&quot;&gt;infrastructure model&lt;/a&gt; and &lt;a href=&quot;https://docs.sandstorm.io/en/latest/using/security-practices/&quot;&gt;security practices&lt;/a&gt; which &lt;a href=&quot;https://docs.sandstorm.io/en/latest/using/security-non-events/&quot;&gt;mitigate risks&lt;/a&gt;.&lt;/p&gt;
</description>
				<pubDate>Tue, 28 Feb 2017 00:00:00 -0800</pubDate>
                                <link>https://sandstorm.io/news/2017-02-28-cloudbleed</link>
                                <guid isPermaLink="true">https://sandstorm.io/news/2017-02-28-cloudbleed</guid>
			</item>
		
			<item>
				<title>Sandstorm is returning to its community roots</title>
				<description>&lt;p&gt;Most people know Sandstorm as an open source, community-driven project aiming to enable self-hosting of cloud services and to make it possible for open source web apps to compete with today’s cloud services.&lt;/p&gt;

&lt;p&gt;Many people also know that Sandstorm is a for-profit startup, with a business model centered on charging for enterprise-oriented features, such as LDAP and SAML single-sign-on integration, organizational access control policies, and the like. This product was called “Sandstorm for Work”; it was still open source, but official builds hid the features behind a paywall. Additionally, we planned eventually to release a scalable version of Sandstorm for big enterprise users, based on the same tech that powers Sandstorm Oasis, our managed hosting service.&lt;/p&gt;

&lt;p&gt;As an open source project, Sandstorm has been successful: We have a thriving community of contributors, many developers building and packaging apps, and thousands of self-hosted servers running in the wild. This will continue.&lt;/p&gt;

&lt;p&gt;However, our business has not succeeded. To date, almost no one has purchased Sandstorm for Work, despite hundreds of trials and lots of interest expressed. Only a tiny fraction of Sandstorm Oasis users choose to pay for the service – enough to cover costs, but not much more.&lt;/p&gt;

&lt;p&gt;We attribute this failure to two main problems:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;As a product, Sandstorm is still alpha-quality. As you may know, Sandstorm is pioneering a paradigm shift in the way servers operate, which we call fine-grained containerization. &lt;a href=&quot;https://sandstorm.io/how-it-works&quot;&gt;The benefits of this technology are huge&lt;/a&gt;, but a lot of engineering work is needed to make it work smoothly. Although we’ve built a working product that many people – including ourselves – use for real work every day, many limitations still exist that make Sandstorm feel rough and incomplete compared to alternatives. We know how to fix these problems, but we need more time to do so.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;We underestimated, in classic fashion, the challenge of enterprise sales. As a company of engineers and geeks, we knew that enterprise sales would be outside of our comfort zone, but we didn’t realize just how much work it would be to learn, and how much time we needed to be successful at it. By the end, we were only scratching the surface of how to generate leads and get in the door at big companies; we never managed to do a “real” sales call. In retrospect, we should have hired a business development expert much earlier on. We also should have raised more money and planned for a longer runway.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We plan to publish a more complete postmortem in a subsequent blog post.&lt;/p&gt;

&lt;p&gt;Unfortunately, Sandstorm the business has now run out of money, and we have been unable to raise more.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Project Lives On&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Although it will no longer be our full-time job, Sandstorm will continue as an open source project. We still strongly believe in Sandstorm’s long-term vision and cannot abandon it. I personally will continue to lead Sandstorm’s technical development: reviewing and merging pull requests, pushing releases, and developing new features. We will continue to operate Sandstorm Oasis – your data there is safe. Meanwhile, we will make it easier for our extended community to be involved in core development and decision-making. Jade will be in contact with individual community members to appoint community leaders and grant them the authority to handle a variety of community organizing functions, from App Market approval to organizing meetups.&lt;/p&gt;

&lt;p&gt;Ironically, the pace of development may not even be hurt much. Over the past year, the Sandstorm team has spent a great deal of our time on enabling our business, e.g. building a payment mechanism, processing customers, marketing, and the like. I personally have spent far too much time on fundraising, sales, and other deal-making rather than on coding. With this shift in direction, we can now focus strictly on building out the core platform, getting more done with less time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Immediate Action Items&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As a result of this change, the following has happened today:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;We have pushed a release which removes the Sandstorm for Work paywall. Sandstorm for Work features (like LDAP/SAML integration) are now available to all self-hosted Sandstorm servers at no cost. The product name “Sandstorm for Work” has been retired; there is now only Sandstorm. (Your server should already have received the update. If not, SSH in and type &lt;code&gt;sudo sandstorm update&lt;/code&gt;. Don’t have a server yet? &lt;a href=&quot;https://sandstorm.io/install&quot;&gt;Install Sandstorm now.&lt;/a&gt;)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;We have &lt;a href=&quot;https://github.com/sandstorm-io/blackrock&quot;&gt;open sourced Blackrock&lt;/a&gt;, an alternate back-end for Sandstorm which is able to scale out across a cluster of machines. We have long used this technology to power Sandstorm Oasis, but had hesitated to release it for fear that it would harm our business model. We no longer have a business model to protect, so the code can now be set free.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;We have added the &lt;a href=&quot;https://github.com/sandstorm-io/sandstorm/tree/master/roadmap&quot;&gt;Sandstorm Technology Roadmap&lt;/a&gt; to the Sandstorm repo, where you can learn about everything Sandstorm has built and plans to build. The roadmap is full of projects and features marked “TODO”, so you can see what needs to be built.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;We’ve written a new &lt;a href=&quot;https://github.com/sandstorm-io/sandstorm/blob/master/CONTRIBUTING.md&quot;&gt;contributing guide with a list of projects you can work on&lt;/a&gt;. See if there’s anything that interests you!&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;No changes are expected to &lt;a href=&quot;https://oasis.sandstorm.io&quot;&gt;Sandstorm Oasis&lt;/a&gt; nor &lt;a href=&quot;https://docs.sandstorm.io/en/latest/administering/sandcats/&quot;&gt;Sandcats.io&lt;/a&gt;. Both services will continue to operate going forward.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How you can help&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Want to see Sandstorm succeed? Then, contribute!&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;If you’d like to help build Sandstorm, sign up on &lt;a href=&quot;https://groups.google.com/group/sandstorm-dev&quot;&gt;the sandstorm-dev mailing list&lt;/a&gt; and join us on IRC at #sandstorm on Freenode. There is lots to do, from hardcore systems hacking to community organizing to tasks that require nothing but enthusiasm. For ideas on how you can help, check out the &lt;a href=&quot;https://sandstorm.io/community&quot;&gt;community page&lt;/a&gt; and the &lt;a href=&quot;https://github.com/sandstorm-io/sandstorm/blob/master/CONTRIBUTING.md&quot;&gt;contributing guide&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you have more money than time and would like to support the project financially, the best way to do it is to sign up for a paid account on &lt;a href=&quot;https://oasis.sandstorm.io&quot;&gt;Oasis&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

</description>
				<pubDate>Mon, 06 Feb 2017 00:00:00 -0800</pubDate>
                                <link>https://sandstorm.io/news/2017-02-06-sandstorm-returning-to-community-roots</link>
                                <guid isPermaLink="true">https://sandstorm.io/news/2017-02-06-sandstorm-returning-to-community-roots</guid>
			</item>
		
			<item>
				<title>Sandstorm Solutions: pay for feature prioritization</title>
				<description>&lt;p&gt;Is there a feature or bug holding you back from deploying Sandstorm at your company or for your
team?  Do you need the Sandstorm core devs to prioritize a feature?  &lt;strong&gt;Sandstorm
Solutions&lt;/strong&gt; can fix that.&lt;/p&gt;

&lt;p&gt;There’s always way more on our roadmap than time and people to do it.  We receive requests from
potential customers around the world who would love to use Sandstorm, but need a particular planned
but unimplemented feature, or hit a bug that affects them in particular.
&lt;strong&gt;We now offer Sandstorm feature prioritization to our customers&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;We’re happy to adjust our priorities to support these folks, so we figure we should state that
clearly and make sure it’s something everyone can take advantage of, not just the people who
inquire.&lt;/p&gt;

&lt;p&gt;So here’s the deal with Sandstorm Solutions: if you want a Sandstorm feature prioritized, or a
particular bug fixed, we can do it.  The way this works is:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;You email us at
&lt;a href=&quot;&amp;#109;&amp;#097;&amp;#105;&amp;#108;&amp;#116;&amp;#111;:&amp;#115;&amp;#111;&amp;#108;&amp;#117;&amp;#116;&amp;#105;&amp;#111;&amp;#110;&amp;#115;&amp;#064;&amp;#115;&amp;#097;&amp;#110;&amp;#100;&amp;#115;&amp;#116;&amp;#111;&amp;#114;&amp;#109;&amp;#046;&amp;#105;&amp;#111;&amp;#063;&amp;#115;&amp;#117;&amp;#098;&amp;#106;&amp;#101;&amp;#099;&amp;#116;&amp;#061;&amp;#083;&amp;#097;&amp;#110;&amp;#100;&amp;#115;&amp;#116;&amp;#111;&amp;#114;&amp;#109;&amp;#037;&amp;#050;&amp;#048;&amp;#083;&amp;#111;&amp;#108;&amp;#117;&amp;#116;&amp;#105;&amp;#111;&amp;#110;&amp;#115;&amp;#037;&amp;#050;&amp;#048;&amp;#101;&amp;#115;&amp;#116;&amp;#105;&amp;#109;&amp;#097;&amp;#116;&amp;#101;&amp;#037;&amp;#050;&amp;#048;&amp;#114;&amp;#101;&amp;#113;&amp;#117;&amp;#101;&amp;#115;&amp;#116;&amp;#037;&amp;#050;&amp;#048;&amp;#102;&amp;#111;&amp;#114;&amp;#037;&amp;#050;&amp;#048;&amp;#037;&amp;#050;&amp;#056;&amp;#121;&amp;#111;&amp;#117;&amp;#114;&amp;#037;&amp;#050;&amp;#048;&amp;#099;&amp;#111;&amp;#109;&amp;#112;&amp;#097;&amp;#110;&amp;#121;&amp;#037;&amp;#050;&amp;#048;&amp;#110;&amp;#097;&amp;#109;&amp;#101;&amp;#037;&amp;#050;&amp;#057;&amp;#038;&amp;#098;&amp;#111;&amp;#100;&amp;#121;&amp;#061;&amp;#072;&amp;#105;&amp;#037;&amp;#050;&amp;#048;&amp;#083;&amp;#097;&amp;#110;&amp;#100;&amp;#115;&amp;#116;&amp;#111;&amp;#114;&amp;#109;&amp;#037;&amp;#050;&amp;#048;&amp;#116;&amp;#101;&amp;#097;&amp;#109;&amp;#037;&amp;#050;&amp;#067;&amp;#037;&amp;#048;&amp;#065;&amp;#037;&amp;#048;&amp;#065;&amp;#079;&amp;#117;&amp;#114;&amp;#037;&amp;#050;&amp;#048;&amp;#112;&amp;#114;&amp;#111;&amp;#098;&amp;#108;&amp;#101;&amp;#109;&amp;#037;&amp;#050;&amp;#048;&amp;#116;&amp;#104;&amp;#097;&amp;#116;&amp;#037;&amp;#050;&amp;#048;&amp;#119;&amp;#101;&amp;#037;&amp;#050;&amp;#048;&amp;#110;&amp;#101;&amp;#101;&amp;#100;&amp;#037;&amp;#050;&amp;#048;&amp;#115;&amp;#111;&amp;#108;&amp;#118;&amp;#101;&amp;#100;&amp;#037;&amp;#050;&amp;#048;&amp;#105;&amp;#115;&amp;#037;&amp;#051;&amp;#065;&amp;#037;&amp;#048;&amp;#065;&amp;#037;&amp;#048;&amp;#065;&amp;#037;&amp;#050;&amp;#056;&amp;#101;&amp;#120;&amp;#112;&amp;#108;&amp;#097;&amp;#105;&amp;#110;&amp;#037;&amp;#050;&amp;#048;&amp;#112;&amp;#114;&amp;#111;&amp;#098;&amp;#108;&amp;#101;&amp;#109;&amp;#037;&amp;#050;&amp;#048;&amp;#104;&amp;#101;&amp;#114;&amp;#101;&amp;#037;&amp;#050;&amp;#057;&amp;#037;&amp;#048;&amp;#065;&amp;#037;&amp;#048;&amp;#065;&amp;#087;&amp;#104;&amp;#097;&amp;#116;&amp;#037;&amp;#050;&amp;#048;&amp;#099;&amp;#097;&amp;#110;&amp;#037;&amp;#050;&amp;#048;&amp;#121;&amp;#111;&amp;#117;&amp;#037;&amp;#050;&amp;#048;&amp;#100;&amp;#111;&amp;#037;&amp;#050;&amp;#048;&amp;#116;&amp;#111;&amp;#037;&amp;#050;&amp;#048;&amp;#104;&amp;#101;&amp;#108;&amp;#112;&amp;#037;&amp;#050;&amp;#048;&amp;#117;&amp;#115;&amp;#037;&amp;#050;&amp;#067;&amp;#037;&amp;#050;&amp;#048;&amp;#097;&amp;#110;&amp;#100;&amp;#037;&amp;#050;&amp;#048;&amp;#104;&amp;#111;&amp;#119;&amp;#037;&amp;#050;&amp;#048;&amp;#109;&amp;#117;&amp;#099;&amp;#104;&amp;#037;&amp;#050;&amp;#048;&amp;#119;&amp;#111;&amp;#117;&amp;#108;&amp;#100;&amp;#037;&amp;#050;&amp;#048;&amp;#105;&amp;#116;&amp;#037;&amp;#050;&amp;#048;&amp;#099;&amp;#111;&amp;#115;&amp;#116;&amp;#037;&amp;#051;&amp;#070;&amp;#037;&amp;#048;&amp;#065;&amp;#037;&amp;#048;&amp;#065;&amp;#084;&amp;#104;&amp;#097;&amp;#110;&amp;#107;&amp;#115;&amp;#037;&amp;#050;&amp;#049;&amp;#037;&amp;#048;&amp;#065;&amp;#037;&amp;#048;&amp;#065;&amp;#037;&amp;#050;&amp;#056;&amp;#121;&amp;#111;&amp;#117;&amp;#114;&amp;#037;&amp;#050;&amp;#048;&amp;#110;&amp;#097;&amp;#109;&amp;#101;&amp;#037;&amp;#050;&amp;#057;&amp;#037;&amp;#048;&amp;#065;&amp;#037;&amp;#050;&amp;#056;&amp;#121;&amp;#111;&amp;#117;&amp;#114;&amp;#037;&amp;#050;&amp;#048;&amp;#099;&amp;#111;&amp;#109;&amp;#112;&amp;#097;&amp;#110;&amp;#121;&amp;#037;&amp;#050;&amp;#057;&amp;#037;&amp;#048;&amp;#065;&amp;#037;&amp;#050;&amp;#056;&amp;#121;&amp;#111;&amp;#117;&amp;#114;&amp;#037;&amp;#050;&amp;#048;&amp;#112;&amp;#104;&amp;#111;&amp;#110;&amp;#101;&amp;#037;&amp;#050;&amp;#048;&amp;#110;&amp;#117;&amp;#109;&amp;#098;&amp;#101;&amp;#114;&amp;#037;&amp;#050;&amp;#057;&amp;#037;&amp;#048;&amp;#065;&quot;&gt;solutions@sandstorm.io&lt;/a&gt;
with an explanation of what you need.&lt;/li&gt;
  &lt;li&gt;We’ll make sure it fits into our roadmap, and if so, we’ll give you an preliminary estimate of how
long we think it’ll take to implement, and how much it’ll cost.&lt;/li&gt;
  &lt;li&gt;We own the copyright on our work.&lt;/li&gt;
  &lt;li&gt;If everything sounds good, we’ll draw up a contract and get to work!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a class=&quot;linkbutton&quot; href=&quot;mailto:solutions@sandstorm.io?subject=Sandstorm%20Solutions%20estimate%20request%20for%20%28your%20company%20name%29&amp;amp;body=Hi%20Sandstorm%20team%2C%0A%0AOur%20problem%20that%20we%20need%20solved%20is%3A%0A%0A%28explain%20problem%20here%29%0A%0AWhat%20can%20you%20do%20to%20help%20us%2C%20and%20how%20much%20would%20it%20cost%3F%0A%0AThanks%21%0A%0A%28your%20name%29%0A%28your%20company%29%0A%28your%20phone%20number%29%0A&quot;&gt;
Get an estimate »
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Need something different?  We’re happy to talk about how we can help you succeed - drop us a line at
&lt;a href=&quot;&amp;#109;&amp;#097;&amp;#105;&amp;#108;&amp;#116;&amp;#111;:&amp;#115;&amp;#111;&amp;#108;&amp;#117;&amp;#116;&amp;#105;&amp;#111;&amp;#110;&amp;#115;&amp;#064;&amp;#115;&amp;#097;&amp;#110;&amp;#100;&amp;#115;&amp;#116;&amp;#111;&amp;#114;&amp;#109;&amp;#046;&amp;#105;&amp;#111;&amp;#063;&amp;#115;&amp;#117;&amp;#098;&amp;#106;&amp;#101;&amp;#099;&amp;#116;&amp;#061;&amp;#083;&amp;#097;&amp;#110;&amp;#100;&amp;#115;&amp;#116;&amp;#111;&amp;#114;&amp;#109;&amp;#037;&amp;#050;&amp;#048;&amp;#083;&amp;#111;&amp;#108;&amp;#117;&amp;#116;&amp;#105;&amp;#111;&amp;#110;&amp;#115;&amp;#037;&amp;#050;&amp;#048;&amp;#101;&amp;#115;&amp;#116;&amp;#105;&amp;#109;&amp;#097;&amp;#116;&amp;#101;&amp;#037;&amp;#050;&amp;#048;&amp;#114;&amp;#101;&amp;#113;&amp;#117;&amp;#101;&amp;#115;&amp;#116;&amp;#037;&amp;#050;&amp;#048;&amp;#102;&amp;#111;&amp;#114;&amp;#037;&amp;#050;&amp;#048;&amp;#037;&amp;#050;&amp;#056;&amp;#121;&amp;#111;&amp;#117;&amp;#114;&amp;#037;&amp;#050;&amp;#048;&amp;#099;&amp;#111;&amp;#109;&amp;#112;&amp;#097;&amp;#110;&amp;#121;&amp;#037;&amp;#050;&amp;#048;&amp;#110;&amp;#097;&amp;#109;&amp;#101;&amp;#037;&amp;#050;&amp;#057;&amp;#038;&amp;#098;&amp;#111;&amp;#100;&amp;#121;&amp;#061;&amp;#072;&amp;#105;&amp;#037;&amp;#050;&amp;#048;&amp;#083;&amp;#097;&amp;#110;&amp;#100;&amp;#115;&amp;#116;&amp;#111;&amp;#114;&amp;#109;&amp;#037;&amp;#050;&amp;#048;&amp;#116;&amp;#101;&amp;#097;&amp;#109;&amp;#037;&amp;#050;&amp;#067;&amp;#037;&amp;#048;&amp;#065;&amp;#037;&amp;#048;&amp;#065;&amp;#079;&amp;#117;&amp;#114;&amp;#037;&amp;#050;&amp;#048;&amp;#112;&amp;#114;&amp;#111;&amp;#098;&amp;#108;&amp;#101;&amp;#109;&amp;#037;&amp;#050;&amp;#048;&amp;#116;&amp;#104;&amp;#097;&amp;#116;&amp;#037;&amp;#050;&amp;#048;&amp;#119;&amp;#101;&amp;#037;&amp;#050;&amp;#048;&amp;#110;&amp;#101;&amp;#101;&amp;#100;&amp;#037;&amp;#050;&amp;#048;&amp;#115;&amp;#111;&amp;#108;&amp;#118;&amp;#101;&amp;#100;&amp;#037;&amp;#050;&amp;#048;&amp;#105;&amp;#115;&amp;#037;&amp;#051;&amp;#065;&amp;#037;&amp;#048;&amp;#065;&amp;#037;&amp;#048;&amp;#065;&amp;#037;&amp;#050;&amp;#056;&amp;#101;&amp;#120;&amp;#112;&amp;#108;&amp;#097;&amp;#105;&amp;#110;&amp;#037;&amp;#050;&amp;#048;&amp;#112;&amp;#114;&amp;#111;&amp;#098;&amp;#108;&amp;#101;&amp;#109;&amp;#037;&amp;#050;&amp;#048;&amp;#104;&amp;#101;&amp;#114;&amp;#101;&amp;#037;&amp;#050;&amp;#057;&amp;#037;&amp;#048;&amp;#065;&amp;#037;&amp;#048;&amp;#065;&amp;#087;&amp;#104;&amp;#097;&amp;#116;&amp;#037;&amp;#050;&amp;#048;&amp;#099;&amp;#097;&amp;#110;&amp;#037;&amp;#050;&amp;#048;&amp;#121;&amp;#111;&amp;#117;&amp;#037;&amp;#050;&amp;#048;&amp;#100;&amp;#111;&amp;#037;&amp;#050;&amp;#048;&amp;#116;&amp;#111;&amp;#037;&amp;#050;&amp;#048;&amp;#104;&amp;#101;&amp;#108;&amp;#112;&amp;#037;&amp;#050;&amp;#048;&amp;#117;&amp;#115;&amp;#037;&amp;#050;&amp;#067;&amp;#037;&amp;#050;&amp;#048;&amp;#097;&amp;#110;&amp;#100;&amp;#037;&amp;#050;&amp;#048;&amp;#104;&amp;#111;&amp;#119;&amp;#037;&amp;#050;&amp;#048;&amp;#109;&amp;#117;&amp;#099;&amp;#104;&amp;#037;&amp;#050;&amp;#048;&amp;#119;&amp;#111;&amp;#117;&amp;#108;&amp;#100;&amp;#037;&amp;#050;&amp;#048;&amp;#105;&amp;#116;&amp;#037;&amp;#050;&amp;#048;&amp;#099;&amp;#111;&amp;#115;&amp;#116;&amp;#037;&amp;#051;&amp;#070;&amp;#037;&amp;#048;&amp;#065;&amp;#037;&amp;#048;&amp;#065;&amp;#084;&amp;#104;&amp;#097;&amp;#110;&amp;#107;&amp;#115;&amp;#037;&amp;#050;&amp;#049;&amp;#037;&amp;#048;&amp;#065;&amp;#037;&amp;#048;&amp;#065;&amp;#037;&amp;#050;&amp;#056;&amp;#121;&amp;#111;&amp;#117;&amp;#114;&amp;#037;&amp;#050;&amp;#048;&amp;#110;&amp;#097;&amp;#109;&amp;#101;&amp;#037;&amp;#050;&amp;#057;&amp;#037;&amp;#048;&amp;#065;&amp;#037;&amp;#050;&amp;#056;&amp;#121;&amp;#111;&amp;#117;&amp;#114;&amp;#037;&amp;#050;&amp;#048;&amp;#099;&amp;#111;&amp;#109;&amp;#112;&amp;#097;&amp;#110;&amp;#121;&amp;#037;&amp;#050;&amp;#057;&amp;#037;&amp;#048;&amp;#065;&amp;#037;&amp;#050;&amp;#056;&amp;#121;&amp;#111;&amp;#117;&amp;#114;&amp;#037;&amp;#050;&amp;#048;&amp;#112;&amp;#104;&amp;#111;&amp;#110;&amp;#101;&amp;#037;&amp;#050;&amp;#048;&amp;#110;&amp;#117;&amp;#109;&amp;#098;&amp;#101;&amp;#114;&amp;#037;&amp;#050;&amp;#057;&amp;#037;&amp;#048;&amp;#065;&quot;&gt;solutions@sandstorm.io&lt;/a&gt;.&lt;/p&gt;
</description>
				<pubDate>Thu, 01 Dec 2016 00:00:00 -0800</pubDate>
                                <link>https://sandstorm.io/news/2016-12-01-sandstorm-solutions</link>
                                <guid isPermaLink="true">https://sandstorm.io/news/2016-12-01-sandstorm-solutions</guid>
			</item>
		
			<item>
				<title>Sandstorm Oasis emerging from beta</title>
				<description>&lt;p&gt;Sandstorm is about making it easy to run a personal server. But we also offer &lt;a href=&quot;https://oasis.sandstorm.io&quot;&gt;Sandstorm Oasis&lt;/a&gt;, a service which runs your Sandstorm server for you.&lt;/p&gt;

&lt;p&gt;Contradiction?&lt;/p&gt;

&lt;p&gt;Actually, no: Even if you run your own server, Oasis benefits you. Oasis is important because it makes it possible for anyone to use &lt;a href=&quot;https://apps.sandstorm.io&quot;&gt;Sandstorm’s library of open source apps&lt;/a&gt;, even if they really don’t want to run their own server. A larger audience means that more and better apps will become available. Indeed, after we launched Oasis last year, the rate of new apps becoming available on Sandstorm spiked.&lt;/p&gt;

&lt;p&gt;That benefits self-hosters, because those same apps can be used on your private server, too.&lt;/p&gt;

&lt;p&gt;In fact, we at Sandstorm don’t necessarily think “the cloud” is a bad idea. What we believe is that you should have the freedom to choose what makes sense for you. But that choice is moot if the particular app you need to use is only available in the cloud – we need the same apps to be available everywhere.&lt;/p&gt;

&lt;p&gt;Oasis has now been running reliably for over a year. The Sandstorm team uses Oasis every day to get our own work done. I am composing this blog post in &lt;a href=&quot;https://oasis.sandstorm.io/appdemo/h37dm17aa89yrd8zuqpdn36p6zntumtv08fjpu8a8zrte7q1cn60&quot;&gt;Etherpad&lt;/a&gt;, while organizing my task list in &lt;a href=&quot;https://oasis.sandstorm.io/appdemo/m86q05rdvj14yvn78ghaxynqz7u2svw6rnttptxx49g1785cdv1h&quot;&gt;Wekan&lt;/a&gt;, chatting with teammates in &lt;a href=&quot;https://oasis.sandstorm.io/appdemo/vfnwptfn02ty21w715snyyczw0nqxkv3jvawcah10c6z7hj1hnu0&quot;&gt;Rocket.Chat&lt;/a&gt;, and syncing files with &lt;a href=&quot;https://oasis.sandstorm.io/appdemo/8aspz4sfjnp8u89000mh2v1xrdyx97ytn8hq71mdzv4p4d8n0n3h&quot;&gt;Davros&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Here are just some of the things we’ve changed since Oasis was launched:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Implemented automatic updates for apps.&lt;/li&gt;
  &lt;li&gt;Added cryptographic verification of app author identity.&lt;/li&gt;
  &lt;li&gt;Added unified notifications and activity indicators, so you can find out when apps need attention without opening them to find out.&lt;/li&gt;
  &lt;li&gt;Added collections, allowing you to share a group of grains as one unit.&lt;/li&gt;
  &lt;li&gt;Added the ability to share grains through other apps, e.g. sharing a document to a Rocket.Chat channel, without generating a magic link.&lt;/li&gt;
  &lt;li&gt;Added a “trash” mechanism to make it harder to accidentally delete an important grain.&lt;/li&gt;
  &lt;li&gt;Added the ability to delete your own account.&lt;/li&gt;
  &lt;li&gt;Added support for apps to export WebDAV APIs.&lt;/li&gt;
  &lt;li&gt;Made it easier for Sandstorm apps to connect with mobile client apps.&lt;/li&gt;
  &lt;li&gt;Made Sandstorm’s UI mobile-friendly.&lt;/li&gt;
  &lt;li&gt;Made it so that our most-used apps are pre-installed for new users.&lt;/li&gt;
  &lt;li&gt;Made sharing easier and more secure by adding contact auto-complete and “request access” UIs.&lt;/li&gt;
  &lt;li&gt;Added the ability to attach multiple credentials to one account, so that one login provider being unresponsive won’t prevent you from accessing Sandstorm.&lt;/li&gt;
  &lt;li&gt;Made the left sidebar collapseable for more screen space.&lt;/li&gt;
  &lt;li&gt;With the help of our developer community, doubled the number of apps available on Sandstorm.&lt;/li&gt;
  &lt;li&gt;Improved onboarding for new users with tutorial hints.&lt;/li&gt;
  &lt;li&gt;Performance, scalability, and stability improvements.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/sandstorm-io/sandstorm/blob/master/CHANGELOG.md&quot;&gt;Much more.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We’ve so far kept Oasis labeled “beta”, mostly because, as engineers, we always feel like there’s so much more to do. But, that will always be true – no good software project is ever “done”. With Oasis being used for so much real work, the time has come to remove the “beta” label.&lt;/p&gt;

&lt;p&gt;Oasis will officially emerge from beta on November 27. We wanted to give advance notice of this change because it affects our paying users: we will no longer be waiving your subscription fee as we have during the beta period. For backers of our Indiegogo campaign who opted for free hosting as a perk, the timer on your service will start now (hey, you got an extra free year!). For the rest, your next monthly invoice will be charged from your credit card. Your subscription payments help support further development of Sandstorm and packaging more apps. Thank you for your support!&lt;/p&gt;

&lt;p&gt;&lt;a class=&quot;linkbutton&quot; href=&quot;https://oasis.sandstorm.io/demo&quot;&gt;Demo Oasis now »&lt;span style=&quot;font-size:60%&quot;&gt;&lt;br /&gt;(no sign-in required)&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
</description>
				<pubDate>Thu, 17 Nov 2016 00:00:00 -0800</pubDate>
                                <link>https://sandstorm.io/news/2016-11-17-oasis-emerging-from-beta</link>
                                <guid isPermaLink="true">https://sandstorm.io/news/2016-11-17-oasis-emerging-from-beta</guid>
			</item>
		
			<item>
				<title>Sandstorm now supports RHEL 7, CentOS 7, Arch, and more</title>
				<description>&lt;p&gt;As of a couple weeks ago – October 23, 2016 – Sandstorm can now be installed on systems with:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Linux Kernel 3.10+ (previously required 3.13+)&lt;/li&gt;
  &lt;li&gt;User namespaces disabled (previously required unprivileged user namespaces)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This means that Sandstorm can now be installed on Red Hat Enterprise Linux (RHEL) 7, as well as its cousin CentOS 7, both of which use kernel version 3.10.&lt;/p&gt;

&lt;p&gt;It also means that Sandstorm can now be installed on Arch Linux, which has historically shipped kernels compiled with &lt;code&gt;CONFIG_USER_NS=n&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;So if you previously couldn’t install Sandstorm because you were using one of these distros, now you can!&lt;/p&gt;

&lt;p&gt;&lt;a class=&quot;linkbutton&quot; href=&quot;https://sandstorm.io/install&quot;&gt;Install Sandstorm now »&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;what-changed&quot;&gt;What changed?&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;For the technically curious…&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Sandstorm uses the Linux kernel’s “namespaces” feature as part of setting up the secure sandboxes in which apps run. Normally, creating namespaces requires root privileges, because these features could be used to escalate privileges. However, using “user namespaces”, a process that does not have root privileges can create a special kind of namespace in which other namespaces are (ostensibly) safe to use. Hence, it allows unprivileged processes to create sandboxes.&lt;/p&gt;

&lt;p&gt;For security reasons, most of Sandstorm does not run with root privileges. Because of this, it has long relied on user namespaces to allow it to set up sandboxes. At the time the Sandstorm project started, it looked like user namespaces would soon be broadly available across Linux distros, so this seemed like a reasonable strategy.&lt;/p&gt;

&lt;p&gt;Unfortunately, this has not been entirely true in practice. The enterprise-oriented RHEL and CentOS distros have long release cycles. Today, they still use kernel version 3.10, which is nearly three years old. Because user namespaces still had many problems in this kernel version, they were disabled by default and are today available only with a boot flag. Meanwhile, some faster-moving distros like Arch have chosen to &lt;a href=&quot;https://bugs.archlinux.org/task/36969&quot;&gt;keep user namespaces disabled&lt;/a&gt; even with newer kernel versions due to security concerns: the user namespaces feature has been the source of many local privilege escalation exploits in Linux. Although these vulnerabilities &lt;a href=&quot;https://docs.sandstorm.io/en/latest/using/security-non-events/#linux-kernel&quot;&gt;can’t be exploited by Sandstorm apps&lt;/a&gt;, such frequent vulnerabilities are problematic for servers which rely on user account separation for security outside of Sandstorm.&lt;/p&gt;

&lt;p&gt;Even as it became apparent that Sandstorm’s use of user namespaces was preventing it from being used on some distros, we were hesitant to try other approaches. It seemed like the only way to solve the problem would be to employ a setuid-root binary to set up sandboxes when user namespaces were not available. setuid-root binaries are inherently risky – if not written exactly correctly, it could open its own privilege escalation vulnerability. Also, it would require a major refactoring of Sandstorm internals to move the supervisor into its own binary.&lt;/p&gt;

&lt;p&gt;But a couple weeks ago, I realized suddenly that a different idea would work. The Sandstorm server normally starts up as root, but then runs several child processes under a regular user account. Most of Sandstorm’s business logic is in a node.js web server. That process talks via Cap’n Proto RPC to a “back-end” daemon written in C++, which in turn launches app sandboxes. This back-end daemon is hand-coded in C++, with the core logic all living in a single file.&lt;/p&gt;

&lt;p&gt;Because of this design, it turned out to be relatively easy to pass superuser privileges down through the back-end, while still keeping them away from the web server. Specifically, the back-end can execute with its &lt;em&gt;effective&lt;/em&gt; UID set to a normal user account, but its &lt;em&gt;real&lt;/em&gt; UID being root. Then, when it comes time to start a sandbox, it can promote itself back to root to do the work.&lt;/p&gt;

&lt;p&gt;This turned out to take only a couple hours to &lt;a href=&quot;https://github.com/sandstorm-io/sandstorm/pull/2644&quot;&gt;implement&lt;/a&gt;. In retrospect, the design seems obvious, and I wish I’d thought of it sooner!&lt;/p&gt;

&lt;p&gt;There is a minor downside: If a vulnerability allows an attacker to cause the back-end to execute arbitrary code, that code could claim the superuser privileges, whereas before it would be limited to the Sandstorm server UID. This risk is probably small because the back-end is a relatively simple program that only speaks directly to other trusted programs (although it speaks indirectly to potentially-malicious actors). Nevertheless, if user namespaces are available, then Sandstorm will avoid handing root privileges to the back-end at all, continuing to operate as it did historically.&lt;/p&gt;

&lt;h3 id=&quot;what-do-i-need-to-do&quot;&gt;What do I need to do?&lt;/h3&gt;

&lt;p&gt;Existing Sandstorm users need not take any action. Your servers will continue to operate exactly as they always have.&lt;/p&gt;

&lt;p&gt;But if you’ve been held back from installing Sandstorm before because it wouldn’t work on your distro, you should try again now!&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://sandstorm.io/install&quot;&gt;Install Sandstorm Standard »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://sandstorm.io/get-feature-key&quot;&gt;Try Sandstorm for Work (supports corporate SSO via LDAP/SAML/AD and organization management features) »&lt;/a&gt;&lt;/p&gt;

</description>
				<pubDate>Thu, 10 Nov 2016 00:00:00 -0800</pubDate>
                                <link>https://sandstorm.io/news/2016-11-10-rhel-centos-arch-support</link>
                                <guid isPermaLink="true">https://sandstorm.io/news/2016-11-10-rhel-centos-arch-support</guid>
			</item>
		
			<item>
				<title>Linux kernel CVE-2016-5195 &amp;quot;Dirty COW&amp;quot; mitigated by Sandstorm</title>
				<description>&lt;p&gt;Last week, a Linux kernel bug, &lt;a href=&quot;https://www.google.com/search?q=CVE-2016-5195&quot;&gt;CVE-2016-5195&lt;/a&gt;, was described as &lt;a href=&quot;http://arstechnica.com/security/2016/10/most-serious-linux-privilege-escalation-bug-ever-is-under-active-exploit/&quot;&gt;“the most serious Linux local privilege escalation ever”&lt;/a&gt;. The bug – which potentially allowed any code running on a Linux machine to escalate its privileges to root – was already being actively exploited in the wild before it was fixed, and had existed in the kernel for many years.&lt;/p&gt;

&lt;p&gt;Since Sandstorm allows any user of a server to upload their own apps, you might wonder if this bug could allow a Sandstorm user to compromise the server.&lt;/p&gt;

&lt;p&gt;We’re happy to report that the answer appears to be “no”. As is &lt;a href=&quot;https://docs.sandstorm.io/en/latest/using/security-non-events/#linux-kernel&quot;&gt;often the case&lt;/a&gt; with Linux kernel bugs, our sandbox blocked the exploit.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Of course, we still recommend updating your kernel in case the bug can be exploited in ways that have not been discovered yet.&lt;/em&gt;&lt;/p&gt;

&lt;h3 id=&quot;technical-details&quot;&gt;Technical Details&lt;/h3&gt;

&lt;p&gt;The bug in question was a race condition in the handling of memory pages mapped copy-on-write. A process can ask that a read-only file be mapped into its memory space in such a way that it is allowed to modify the mapped memory. When the process writes to the memory, the kernel makes a private copy of the affected page, so that the process only modifies its copy, not the original. Meanwhile, a process can request later on that the modifications it made be discarded, returning the page to its original state. In certain circumstances, by both writing to a page and requesting this discard at the same time (in separate threads), the process could end up writing to the original pages that are shared with other processes on the system, instead of its own private copy. Hence, the process could modify any file on the system. By modifying, say, the &lt;code&gt;sudo&lt;/code&gt; utility, it could give itself a backdoor which allows it to gain root privileges trivially.&lt;/p&gt;

&lt;p&gt;However, not just any old write worked here. In order to trigger the race condition, the process had to write in a way that calls the kernel’s &lt;code&gt;get_user_pages()&lt;/code&gt; function with the &lt;code&gt;force&lt;/code&gt; parameter set to &lt;code&gt;1&lt;/code&gt;. The &lt;code&gt;force&lt;/code&gt; parameter says: “If this page is mapped copy-on-write, then let me write to it (making a private copy) even if the page’s protection mode is read-only.” As it turns out, it is possible for a memory mapping to be both read-only and copy-on-write, and in fact this is the mode that is usually used when mapping in a program’s main binary and shared libraries. Normally, no copy is ever performed, because the writes that would trigger them are not allowed. However, there is a special case where this combination of flags matters: If you are running a program in a debugger, and you ask the debugger to insert a breakpoint, it does so by overwriting the instruction at the given address with a break instruction. That is, it modifies the mapped executable. The &lt;code&gt;force&lt;/code&gt; flag actually exists for exactly this purpose: so that the debugger can inject breakpoints into the program being executed by the process being debugged (without affecting any other processes that happen to be running the same program).&lt;/p&gt;

&lt;p&gt;Because the &lt;code&gt;force&lt;/code&gt; flag is only useful in very specific circumstances, only certain code paths can trigger the vulnerability. Kernel security engineer and Sandstorm contributor Andrew Lutomirski tells us the only entry points appear to be:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;The &lt;code&gt;ptrace()&lt;/code&gt; system call’s &lt;code&gt;PTRACE_POKEDATA&lt;/code&gt; operation, which is explicitly meant to be used by debuggers, often for the purpose of setting breakpoints.&lt;/li&gt;
  &lt;li&gt;Writes to &lt;code&gt;/proc/&amp;lt;pid&amp;gt;/mem&lt;/code&gt;. It’s unclear why this code uses &lt;code&gt;force&lt;/code&gt; – possibly it was a mistake.&lt;/li&gt;
  &lt;li&gt;Various drivers, which are also probably using the flag by mistake.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As it turns out, none of these code paths can be exploited by Sandstorm apps:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Sandstorm uses seccomp to block the app from invoking &lt;code&gt;ptrace()&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Sandstorm does not mount &lt;code&gt;/proc&lt;/code&gt; inside app sandboxes.&lt;/li&gt;
  &lt;li&gt;Sandstorm does not expose driver interfaces from inside app sandboxes. For example, &lt;code&gt;/dev&lt;/code&gt; contains only &lt;code&gt;null&lt;/code&gt;, &lt;code&gt;zero&lt;/code&gt;, and &lt;code&gt;urandom&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So, as far as we can tell, Sandstorm has never been vulnerable to this bug.&lt;/p&gt;

&lt;h3 id=&quot;defense-in-depth&quot;&gt;Defense in depth&lt;/h3&gt;

&lt;p&gt;Even if Sandstorm were vulnerable, the exploit would have far reduced impact inside Sandstorm than in a typical Linux environment, because:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Within a Sandstorm app’s sandbox, the visible filesystem consists of the contents of its own package. It cannot see the host system’s files nor files belonging to other apps, hence it would not be able to memory-map them in order to modify them using this bug.&lt;/li&gt;
  &lt;li&gt;App packages cannot contain setuid binaries and, even if they could, apps would not be able to execute them, because Sandstorm sets the &lt;code&gt;NO_NEW_PRIVS&lt;/code&gt; &lt;code&gt;prctl()&lt;/code&gt; flag inside the sandbox.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When running on Sandstorm, a user’s data in an app like Etherpad is containerized separately from another user’s data. In fact, we go one step further and &lt;a href=&quot;https://sandstorm.io/how-it-works#grains&quot;&gt;containerize each document separately&lt;/a&gt;. In the case that Sandstorm had not mitigated the bug outright, it appears the impact of the bug would be that an app could break Sandstorm’s per-document isolation and read/write documents from any number of users, so long as those users all use the same version of the same app on the same server. The app still would not have been able to interfere with other apps. This is the status quo in a typical Linux environment: in most non-Sandstorm environments, an app keeps all users’ data in a single database without per-user isolation. Overall, this is much less significant than a privilege escalation to root. Thankfully, our seccomp mitigation prevented this.&lt;/p&gt;

&lt;h3 id=&quot;sandstorms-security-record&quot;&gt;Sandstorm’s Security Record&lt;/h3&gt;

&lt;p&gt;This is not the first Linux security bug mitigated by Sandstorm. In fact, we’ve kept a long list. Moreover, in addition to mitigating Linux kernel problem, Sandstorm mitigates most vulnerabilities in the apps that run on top of it. Check out the whole list of mitigated vulnerabilities that we’ve compiled: &lt;a href=&quot;https://docs.sandstorm.io/en/latest/using/security-non-events/&quot;&gt;Sandstorm Security Non-Events&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Want to try out Sandstorm as a user? &lt;a href=&quot;https://demo.sandstorm.io&quot;&gt;Try the online demo »&lt;/a&gt;&lt;/p&gt;
</description>
				<pubDate>Tue, 25 Oct 2016 00:00:00 -0700</pubDate>
                                <link>https://sandstorm.io/news/2016-10-25-cve-2016-5195-dirtycow-mitigated</link>
                                <guid isPermaLink="true">https://sandstorm.io/news/2016-10-25-cve-2016-5195-dirtycow-mitigated</guid>
			</item>
		
			<item>
				<title>Sharing documents with a Rocket.Chat room in Sandstorm</title>
				<description>&lt;p&gt;I’m sharing a pro-tip today because I like making sure that everyone gets the most productivity they can out of Sandstorm.&lt;/p&gt;

&lt;p&gt;Let’s say I want to share a grain (e.g., a document, spreadsheet, git repository, or a &lt;a href=&quot;https://sandstorm.io/news/2016-08-09-collections-app&quot;&gt;Collection&lt;/a&gt;) with a group of colleagues who are already in the same &lt;a href=&quot;https://apps.sandstorm.io/app/vfnwptfn02ty21w715snyyczw0nqxkv3jvawcah10c6z7hj1hnu0&quot;&gt;Rocket.Chat&lt;/a&gt; chatroom. To do so, I first click the + icon in Rocket.Chat.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/news/images/rc_button.png&quot; alt=&quot;Click on the + button in Rocket Chat&quot; /&gt;&lt;/p&gt;

&lt;p&gt;This opens a &lt;a href=&quot;https://sandstorm.io/how-it-works#powerbox&quot;&gt;Powerbox&lt;/a&gt; request with a type-ahead search box. Before I’ve typed anything, I can see the grains that have most recently been opened by me.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/news/images/rc2.png&quot; alt=&quot;Powerbox list of grains (ordered by most recently opened)&quot; /&gt;&lt;/p&gt;

&lt;p&gt;For instance, if I’m looking for feedback for a blog post I drafted in &lt;a href=&quot;https://apps.sandstorm.io/app/h37dm17aa89yrd8zuqpdn36p6zntumtv08fjpu8a8zrte7q1cn60&quot;&gt;Etherpad&lt;/a&gt;, I can type “Etherpad” and it will list all Etherpads that I have access to on this server.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/news/images/rc3.png&quot; alt=&quot;Search by grain type&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Here are all the Etherpads I have access to. But today, I’m actually searching for something else: a Collection titled “Sales / Revenue docs”. I can also search for grains by title, so I search for “revenue”:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/news/images/rc4.png&quot; alt=&quot;Search by grain type or title&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Once I’ve selected the grain, I can choose whether I’d like to give everyone in this chatroom the permission to edit or only view this Collection before I connect the grain with this Rocket.Chat room.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/news/images/rc5.png&quot; alt=&quot;grant permission&quot; /&gt;&lt;/p&gt;

&lt;p&gt;When I share a grain in a chatroom, it automatically renders a snippet which includes the icon for the app that opens the grain. It looks like this:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/news/images/rc6_shared.png&quot; alt=&quot;snippet&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Now, everyone who is in this chatroom has access to this Collection (as well as every grain inside it). No need to go share it with them separately.&lt;/p&gt;

&lt;p&gt;To try it out for yourself, go install &lt;a href=&quot;https://apps.sandstorm.io/app/vfnwptfn02ty21w715snyyczw0nqxkv3jvawcah10c6z7hj1hnu0&quot;&gt;Rocket.Chat&lt;/a&gt; now!&lt;/p&gt;

&lt;p&gt;Do you use Sandstorm to collaborate at work? &lt;a href=&quot;https://sandstorm.io/business&quot;&gt;Sandstorm for Work&lt;/a&gt; (&lt;a href=&quot;https://sandstorm.io/get-feature-key&quot;&gt;60-day free trial&lt;/a&gt;) comes with priority support, organization management features, and integration with enterprise infrastructure.&lt;/p&gt;

&lt;p&gt;By the way, if you found this useful and would like to see more bite-sized pro-tip style blog posts in the future, please reshare this and let me know (I’m &lt;a href=&quot;https://twitter.com/qiqing&quot;&gt;@qiqing&lt;/a&gt; on Twitter)!&lt;/p&gt;
</description>
				<pubDate>Thu, 13 Oct 2016 00:00:00 -0700</pubDate>
                                <link>https://sandstorm.io/news/2016-10-13-sharing-documents-rocketchat</link>
                                <guid isPermaLink="true">https://sandstorm.io/news/2016-10-13-sharing-documents-rocketchat</guid>
			</item>
		
	</channel>
</rss>
