-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Document attacks based on poorly secured discovery mechanism #12
Comments
More advanced attack, could possibly migrate all existing user's data, of interest to the attacker, to attacker's controlled storage. Since raw IRIs are often not visible to the user, they possibly wouldn't even notice that the attacker is now hosting their current and yet-to-be-created data. |
Good point. Reminds me of Trusting Trust :) Basically, I guess the moral is that editing the main webid doc should require a lot of trust, on a par with "root" access to the pod. The Authorization Agent should make this very clear to the end user. A profile editor that is not fully trusted should only be allowed to edit extended webid docs. |
There should also be warnings in the way todays apps inform you about "log in from a new location": "You added a completely new storage at http://malicious.example. Was that really you?" |
@angelo-v, We assume here that the app is colluding with the attacker, either a malicious app or a compromised app. Which part of the system would be responsible for warning the user? |
I don't have a technical solution, I am merely describing what I would expect from a user perspective. It could be a trusted agent /app that keeps a look on that or the pod (provider?) But it could be also certain apps like umai for recipes. If it discoveres a new location for recipes (added by a malicious app) it could make the user aware and let them confirm. |
Does it assume that other apps using that data, eg. umai , keep some cache for example in local storage and whenever they do discovery they compare it to what they have cached? My first countermeasure will be to only have a trusted agent (e.g. SAI authorization agent) to have access to modify the discovery mechanisms. All the other apps, which have the lowest trust level in the whole ecosystem of Solid product classes, always start by asking the User's authorization agent for specific access. If new entries have to be created in the discovery mechanism, the authorization agent takes care of that based on the user's authorization for the app requesting access. Allowing random apps to touch the discovery mechanism is setting oneself up for failure from the start. |
In #12 (comment), please note that sequences of actions (a/k/a steps) should be represented as ordered lists. Unordered (bullet) lists should be used for parallel things |
I was prompted to take a read at #9 (from the discussion last week at SolidOS meeting) and maybe leave some of my cents to the topic. As the PR is merged, probably this issue is the best place to comment on (because my point also relates to this topic)? tl;dr: I agree that there are security issues as covered in these two posts. But I don't think it is a good idea to separate the discussion, and (more importantly) to propose separate solutions. We should only have one mechanism. Basically, the two questions are the same: how do we prevent a (potentially malicious, but attractive) application from modifying important triples. For #9 it was the So, my view is: we need one mechanism to deal with all these situations. The level of "importance" is not (somewhat) arbitrarily determined by us, but by the user -- for practical reasons, we can set defaults, but users should be allowed to make their own decisions. Then the question is: what mechanism? My view is similar to the things @elf-pavlik and @angelo-v mentioned above: a "confirmation" step for the user (and also an explanation within it), and the user can configure (and Solid, e.g. CSS, can provide a default) which "agent"/"component" (called "special agent" below) [s]he wants to use for the confirmation step (called "special authorization" below). More concretely, for the two cases #9 and this issue mentioned, we can have the following:
Although I tried to minimize affects, this requires some changes to Solid spec, because the Solid Service needs to do two additional things compared to now:
All other actions are performed by the special agent. So the agent can also be fully autonomous if needed. The agent can run from anywhere; the user can dynamically [de-]register it whenever [s]he wants; the Solid service can have a fall-back agent which approves anything. (Of course, protocol needs to be defined for the interaction. But that should not be complicated.) A tempting scenario is to be combined with a browser extension: the user is only deemed "online" if the browser extension is activated, and the special agent will only ask the user in that case, and rejects in all other cases. (Or, even, the browser extension itself is the special agent; but that has problems if the user somehow lost access to the same browser extension.) Because it's a browser extension, it can easily start a pop-up or new tab. That can make the special authorization mechanism completely transparent/invisible to the App. |
Thank you, @renyuneyun, for sharing your insights.
I want to clarify if you are discussing it with the assumption of resource-level access control or if you are considering exploring triple-level access control. Your comment suggests access control support is needed based on some triple patterns instead of just working on the resource level. Besides protecting the |
Sorry for taking quite some time to respond, as other stuffs were occupying time.
That is an important observation. I was indeed talking about triple-level access control, for this special mechanism. I'm aware WAC and ACP are both resource-level mechanisms, and do not intend to evolve to triple-level yet. Compared to triple-level mechanisms, document-level mechanisms features:
Compared to a document-level mechanism, triple-level mechanisms has the following benefits:
To me, that's a clear signal to prefer triple-level mechanisms. This is not a full access control policy language (at least yet), so it doesn't have to be so carefully thought about, compared to, e.g., ACP. Existing access control mechanisms won't be broken as they are the main ones, and this special mechanism only applies to "critical" things.
As a response in-line-with this issue topic, for things equivalent/similar to SAI's Authorization Agent, I don't think that needs to be separately introduced, as manual authorization can be performed by the special agent/pop-up. For example, for Type Index, they may be set as protected resources as well (in either triple-level or document-level), and the user makes manual special authorization whenever they are to be updated. Or, if they are not that sensitive (i.e. the same App doesn't have to request permission every time it updates the TI), ACP is the choice as it can assign and deny permissions based on both WebID and ClientID. (The discussion below are out of bound. Please safely ignore them if wanting to keep the discussion alinging with the topic.) As a response out-of this issue topic, my answer would be to rely on alternative more automated mechanisms, such as the perennial data terms of use (disclaimer: I'm the author of that paper). They would make the whole flow of authorization more automated:
Of course, more work is needed before that can be realised in real-world, in particular regarding how can the user write these data policies efficiently, and how "data" is designated. SAI's existing exploration of shape trees can be useful. Also, maybe SAI's Authorization Agent can be transformed to a behaviour-learning component that learns and proposes data policies for the user. |
This is related to #9
An example scenario:
The text was updated successfully, but these errors were encountered: