<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Clark-Wilson Policies in ACP: Controlling Information Flow Between Solid Apps</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Ellie Forsyth</string-name>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Ross Horne</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Computer and Information Science, University of Strathclyde</institution>
          ,
          <addr-line>Glasgow</addr-line>
          ,
          <country country="UK">UK</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Electronic and Electrical Engineering, University of Strathclyde</institution>
          ,
          <addr-line>Glasgow</addr-line>
          ,
          <country country="UK">UK</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>This paper explains how toavoid certain unintended information flows betweenapps connected to the same Solid pod. We draw attention to threats faced sifecurity policies for Solid pods omit the identities of clients, resulting in confidential information intended for onaepp leaking to other apps. We also explain good practiceusage of ACP for avoiding such insecure configurations and draw parallels with the famousClark-Wilson policy model for enterprise security. We propose that trusted apps enforcing security policy models should be developed so that pod owners need not be policy experts to operate secure pods.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>1. Introduction
resource is requested. Beyond Solid, WAC is used by the W3C to specify access control for
some of their own sites. On the other hand, ACP was introduced more recently toset more
specific permissions in the Solid project thanWAC. In particular, ACP can setthe client (the
Solid app) and issuer (identity provider).</p>
      <p>
        This work explains pitfalls relatedto designing security policies using WAC and ACP.
We, (
        <xref ref-type="bibr" rid="ref1">1</xref>
        ), explain threat models and attack vectors relevant tosecurity policies for Solid;(
        <xref ref-type="bibr" rid="ref2">2</xref>
        ),
demonstrate key attack vectors that exist in Solid pods that employ WAC using the
standard implementation as offered by the Community Solid Server for example;(
        <xref ref-type="bibr" rid="ref3">3</xref>
        ),
devise measures to address attack vectors, leveraging ACP, and explain why they are
appropriate; (
        <xref ref-type="bibr" rid="ref4">4</xref>
        ) connect the innovation to established security policies, notably
ClarkWilson, there access do not only relate objects (data) and subjects (users), but also
include processes which could be Solid apps. The paper also explains thatsecurity apps
could be developed to ensure that Pods are configured with policies that adhere to security
policy models.
2. ACP in relation to the Clark-Wilson Security Policy Model
In this section, we explain how a key differencebetween WAC and ACP can beexplained in
terms of the famous Clark-Wilson security policy model that was designed for managing the
integrity of data used by enterprise processes [8]. The section then goes on to explain some
attack vectors that arrise if certain features appearing in ACP that also appear in the
ClarkWilson security policy model are not used correctly.
2.1. ACP compared to WAC
The primary distinction between policies designed using Access Control Policy (ACP)
rather than Web Access Control (WAC) is their ability to manage access to resources
with respect to clients andissuers, not only users or groups ofusers. To understand
this see the WAC policy in Fig. 1, which we will see does not fully prevent undesirable
information flows between apps due to its restricted policyframework, which solely allows
the specification of agents using acl:agent. This particular authorisation rule indicates that
an agent identified by a WebID can read and write, to any resource in the namespace
indicated by acl:default.
      </p>
      <p>1 @prefix acl: &lt;http://www.w3.org/ns/auth/acl#&gt; .
2
3 &lt;#exampleOfWAC&gt;
4 a acl:Authorisation;
5 acl:agent &lt;https://solidweb.me/Ellie-s-Pod/profile/card#me&gt;;
6 acl:default &lt;https://solidweb.me/Ellie-s-Pod/Resource1/&gt;;
7 acl:mode acl:Read, acl:Write.</p>
      <p>In contrast, ACP provides more contextinformation, enabling the precise specification of
agents through acp:agent, apps via acp:client, and Identity Providers (IDPs)using
acp:issuer, depicted in Figure 2. The rest of the paper explains the security implications of
these features for Solid.
app1. A single trusted issuer is also named.
2.2. Clark-Wilson in ACP
The Clark-Wilson model and acp:client in ACP have the common feature that the access
to information via specified clients—the apps accessing resources within a Pod—can be
restricted. Within the Clark-Wilson model, a fundamental component sometimes called the
process (or Transformation Procedure c.f. Clark &amp; Wilson) acts as an intermediary between
the users and the resources, as do apps in the Solid framework.</p>
      <p>In Clark-Wilson access is governed by “permissions” that specify the combinations of
agent, client and resource for which access is permitted. Thus, in ensuring that only
authorised clients are granted access, acp:client is aligned with the Clark-Wilson security
policy model.</p>
      <p>Illustrated in Fig. 3 is a conceptual representation of an example scenario for aSolid
Pod, describing access control mechanisms available to Pod Owners. This framework
empowers Pod Owners to meticulously tailor access privileges, allocating permissions to
specific resources through designated applications. Furthermore, Pod Owners can permit
more limited access to other agents, thereby enabling controlled interactionwith designated
resources through authorised applications. In Fig. 3 a Pod Owner limits access to a
resource resource1 when app1 is used and likewise for resource2 and app2. In addition,
they have granted more restrictedaccess to an external agentto access resource2 only
through app2.</p>
      <p>The ACP policy governing resource1 in Fig. 3 was already provided in Fig. 2. That ACP
policy can be extended with the policy ingoverning resource2 provided in Fig. 4. This
ACP policy governs how two agents can access a resource referred to as resource2 in Fig.
3, as described above. This is a realistic scenario since it may be the case that the owner
wishes to share more widely information in app2 while having the reassurance that
information in resources accessed from app1 does not flow to app2.</p>
      <p>1 &lt;#exampleOfACP_2&gt;
2 a acp:AccessControlResource;
3 acp:resource &lt;https://solidweb.me/Ellie-s-Pod/Resource2/&gt;;
4 acp:accessControl &lt;#ownerAccess2&gt;, &lt;#externalAgent&gt;;
5 acp:memberAccessControl &lt;#ownerAccess2&gt;, &lt;#externalAgent&gt;.
6
7 &lt;#ownerAccess2&gt;
8 a acp:AccessControl;
9 acp:apply [
10 a acp:Policy;
11 acp:allow acl:Read, acl:Write;
12 acp:allOf [
13 a acp:Matcher;
14 acp:client &lt;https://solidweb.me/ClientPod/app2/clientid.jsonld&gt;;
15 acp:agent &lt;https://solidweb.me/Ellie-s-Pod/profile/card#me&gt;; acp:issuer
16 &lt;https://solidweb.me/&gt; ] ].
17
18 &lt;#externalAgent&gt;
19 a acp:AccessControl;
20 acp:apply [
21 a acp:Policy;
22 acp:allow acl:Read;
23 acp:allOf [
24 a acp:Matcher;
25 acp:client &lt;https://solidweb.me/ClientPod/app2/clientid.jsonld&gt;;
26 acp:agent &lt;https://solidweb.me/EF-Pod/profile/card#me&gt;;
27 acp:issuer &lt;https://solidweb.me/&gt; ] ].</p>
      <p>The policy in Fig. 3 inspired by Clark-Wilson we have just shown can be implemented in
ACP, but is not supported by WAC. While ACP gives us a vocabulary for defining
policies, its secure usage is contingent upon the properconfiguration of ACP policies,
particularly with respect to acp:client directives, as we elaborate on next.
2.3. Attack vectors when acp:client is omitted
We explain an attack vector enabled when WAC is used or an ACP policy is configured
insecurely. This proves that policies must stipulate acp:client unless data is sanitised.</p>
      <p>
        Suppose a user intends for two resources to be exclusively accessed by two different apps, as
depicted in Figure 3. Failure to specify that a client (app) should exclusively access
resource X results in permitting bothapps access to X. The steps that acompromised
client may take to access resources not intended for them are illustrated by the message
sequence chart (MSC) depicted inFigure 5. The MSC not only clearlydisplays the
attack vector but also the interactions a user can have with their Pod. We assume,(
        <xref ref-type="bibr" rid="ref1">1</xref>
        ),
that an honest app has created a resource. An app compromised by the attacker then
requests access to a resource within a user’s Pod via an honest IdP, (
        <xref ref-type="bibr" rid="ref2">2</xref>
        ). The IdP,
subsequently, issues an access token nameda DPoP token and, (
        <xref ref-type="bibr" rid="ref3">3</xref>
        ), this is sent back to the
requesting app. The app can now spend this DPoP token to access the user’s Pod
resource, (
        <xref ref-type="bibr" rid="ref4">4</xref>
        ); where the request is checked by the authorisation server for thepod. The
authorisation server will verify the app by checking the resource ACP policyb,ut, (
        <xref ref-type="bibr" rid="ref5">5</xref>
        ),
since the policy does not state the client (app), access is granted to the app. Therefore,(
        <xref ref-type="bibr" rid="ref6">6</xref>
        ),
a compromised app is accessing a confidential resource within a Pod.
      </p>
    </sec>
    <sec id="sec-2">
      <title>Compromised App (attacker)</title>
    </sec>
    <sec id="sec-3">
      <title>IdP &amp; User</title>
      <p>
        Authorisation Server
(
        <xref ref-type="bibr" rid="ref1">1</xref>
        ) honest client writes resource X for user
(
        <xref ref-type="bibr" rid="ref2">2</xref>
        ) Requests access from user
(
        <xref ref-type="bibr" rid="ref3">3</xref>
        ) DPoP token issued
(
        <xref ref-type="bibr" rid="ref4">4</xref>
        ) Spends DPoP token to access resource X
      </p>
      <p>
        (
        <xref ref-type="bibr" rid="ref5">5</xref>
        ) policy for X names user but not client
(
        <xref ref-type="bibr" rid="ref6">6</xref>
        ) access granted to resource X
      </p>
      <p>
        Using acp:client the attack vector in Figure 5 is preventable. Since the ACP policy is
able to state within the permissions which app can access a given resource within a Pod,
the attack vector would be blocked by theauthorisation server at step (
        <xref ref-type="bibr" rid="ref5">5</xref>
        ). The use of
acp:client in policies is of course contingent upon client IDs being associated with Solid
applications. Consequently, apps with dynamic client IDs may only be entrusted with
sanitised data that may flow freely between apps.
2.4. Technicalities of client identity
The effective use of acp:client is, of course, contingent upon theexistence of a usable client
ID to specify within an ACPpolicy. Many Solid apps currently generate their client IDs using
Dynamic Client Registration (DCR), a protocol where an app is registered with the
authorisation server by sending an HTTPPOST request to the clientregistration endpoint
[9]. Subsequently, the authorisation server assigns a opaque random client ID for the given
session. The use of DCR in many appsposes challenge for setting appropriate ACP policies,
as the client ID is generated after the security policy has beeenstablished. Consequently,
the acp:client predicate cannot reference a client ID generatedusing DCR. Therefore, we
recommend that apps are converted from using DCR clientID to a usable, stable one. The
process for doing this varies from app to app.
      </p>
      <p>It may be possible to have a security policy model where DCR clients can access
certain data. However, it should be known that such data should be sanitised inthe
sense that it is fit for consumption by any app in the ecosystem that a usceornnecting to
the pod may use. As we have seenpreviously in this paper, information without a policy
that identifies clients, may flow freely through the system. This potentially means that
private personal data should not be handled by sucahpps, or there is a risk of
violating regulation such as GDPR due to exposure to data breaches involving a single
compromised app in the ecosystem. Since personal data is a primary use-case for Solid,
one must ask carefully the question of what counts as sanitised data.
3. Beyond Clark-Wilson: attacks when acp:issuer omitted
Having explained the importanceof acp:client, we now explain another attackvector made
possible by omitting acp:issuer from ACP policies. By specifying authorised Identity
Providers (IdPs), the acp:issuer predicate restricts authentication and access privileges solely
to designated IdPs trusted by the pod. Without stipulating acp:issuer threat actors could
exploit any compromised IdPs listed in a WebID to issue fraudulent tokens, thereby gaining
unauthorised access to Pod resources without the knowledge or consent of the owner of
the WebID.</p>
      <p>Consider the MSC diagram in Figure 6. In this attack vector, a user does not need to
request access nor does an honest client(app). The user has however listed a compromised IdP
in their WebID that would not be acceptable for accessing the pod. Here we see that a
compromised IdP can simply generate a DPoP token themselves and spend it to access a
resource within the Pod, without contact the user of app listed in the ACP policy. Once
again, the authorisation server checks the ACP policyand, assuming the issuer (IDP) has
not been stated within the policy beforehand, access is given to the resource.</p>
      <p>To block this attack vector, the predicate acp:issuer can be added into the policy to
prevent this attack vector from occurring with an arbitrary IdP. This way a pod can list
explicitly which IdPs it trusts sufficiently to serve as a root torfust, for access to the
pod. That is, the IdP is trusted not to exploit it position and also to put in place adequate
measures to avoid becoming compromised, e.g., through cyber attacks on the IdP itself.
Note that issuers were not part of the Clark-Wilson security policy model.</p>
    </sec>
    <sec id="sec-4">
      <title>Issuer</title>
      <p>Compromised IDP (attacker)</p>
    </sec>
    <sec id="sec-5">
      <title>Authorisation Server Checks ACP policy</title>
    </sec>
    <sec id="sec-6">
      <title>Self-signs token for agent and client</title>
    </sec>
    <sec id="sec-7">
      <title>Checks WebID and sees compromised issuer</title>
    </sec>
    <sec id="sec-8">
      <title>Spends token to access resource</title>
      <p>gives access to resource</p>
      <p>Towards trusted security policy apps &amp; Conclusion
We have seen, given the attack vectors in Figures 5 and 6, that using ACP is in itself not
sufficient to ensure that the policy set for a Pod is guaranteeing reasonable confidentiality
and integrity properties. Pod owners really need to set a policy that adheres to an
appropriate security policy model, and that requires expertise that almost certainly the pod
owner will not possess and quite possibly nor will most app developers. As a way to
address this challenge, we develop a prototype security app as a proof of concept for a
special highly-trusted app that sets a security policy on behalf of the pod owner.1 The
security app must have the privileges to control the policy, by setting a policy with the
access mode acl:Control for any part of the pod that the app is intended to manage and
by naming explicitly the security app using acp:client. Indeed, it makes sense that when the
pod is created the security app that is permitted to manage the policy of the pod is
coupled with the pod by setting an appropriate policy. An organisation hosting such a
security app must therefore be trusted above all other apps used – perhaps the pod
provider that is anyway entrusted to properly manage the data in the pod, or an
organisation trusted for its security practices.</p>
      <p>Vulnerabilities discussed in Section 2 resulting from the absence of acp:client in ACP
policies are critical since they may result in confidential personal data leaking to
compromised apps. This paper also points out that this is a problem as old as enterprise
computer security by drawing parallels with the Clark-Wilson security policy model. For a
more recent example of a security policy model where more than the user is taken into
account, observe that the Android security policy model is sensitive to the user, platform,</p>
    </sec>
    <sec id="sec-9">
      <title>1The app is provided in a repository: https://github.com/eforsyth1/SecureSolidApp</title>
      <p>and developer as well as the appwhen determining whether access is permitted[10].
Rich policies are inevitable when many organisations are responsible for daecentralised
ecosystem. In the case of Solid, we,in addition, pointed out in Section3, that the IdP has
disproportionate power to access resources, if compromised. Hence we recommend that
policies protect further resources by stipulating which IdPs are trusted, rather than leaving
the user to decide.</p>
      <p>A key challenge is that pod owners do not have the relevant expertise to manually
set and check their ownpolicies. Priority future work that this paper exposes itshe
need to agree on a precisely definedsecurity policy model for Solid. A security policy
model goes beyond simply using ACP in the sense that it should enforce correucstage of
ACP to adhere to confidentiality or integrity goals. An example of sucha goal is to avoid
unintended information flows between apps controlled by different organisations, as
discussed in this work in a particular instance. Drawing inspiration from Clark-Wilson is
just a starting point towards this aim.</p>
      <p>Acknowledgements This article is partially funded by the COST (European
Cooperation in Science and Technology) Action on Distributed Knowledge Graphs (CA19134).</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>A.</given-names>
            <surname>Sambra</surname>
          </string-name>
          , et al.,
          <article-title>Solid: A platform for decentralized social applications based on linked data, 2016</article-title>
          . MIT CSAIL &amp; Qatar Computing Research Institute.
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>S.</given-names>
            <surname>Capadisli</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Berners-Lee</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Verborgh</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Kjernsmo</surname>
          </string-name>
          , Solid protocol,
          <year>2023</year>
          . URL: https://solidproject.org/ED/protocol.
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>C.</given-names>
            <surname>Esposito</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Horne</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Robaldo</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Buelens</surname>
          </string-name>
          , E. Goesaert,
          <article-title>Assessing the Solid protocol in relation to security and privacy obligations</article-title>
          ,
          <source>Information</source>
          <volume>14</volume>
          (
          <year>2023</year>
          )
          <fpage>411</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>O.</given-names>
            <surname>Sacco</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Passant</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Decker</surname>
          </string-name>
          ,
          <article-title>An access control framework for the web of data</article-title>
          ,
          <source>in: IEEE 10th International Conference onTrust, Security and Privacy inComputing and Communications</source>
          ,
          <year>2011</year>
          , pp.
          <fpage>456</fpage>
          -
          <lpage>463</lpage>
          . doi:
          <volume>10</volume>
          .1109/TrustCom.
          <year>2011</year>
          .
          <volume>59</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>S.</given-names>
            <surname>Capadisli</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Berners-Lee</surname>
          </string-name>
          ,
          <source>Web Access Control</source>
          ,
          <year>2022</year>
          . URL: https://solidproject. org/ TR/wac.
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>M.</given-names>
            <surname>Bosquet</surname>
          </string-name>
          ,
          <source>Access control policy(ACP)</source>
          ,
          <year>2022</year>
          . URL: https://solid.github.io/ authorization-panel/acp-specification/.
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>S.</given-names>
            <surname>Tramp</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Story</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Sambra</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Frischmuth</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Martin</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Auer</surname>
          </string-name>
          ,
          <article-title>Extending the WebID protocol with access delegation</article-title>
          ,
          <source>in: Proceedings of the Third International Workshop on Consuming Linked Data (COLD2012)</source>
          ,
          <source>CEUR-WS. org</source>
          ,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>D. D.</given-names>
            <surname>Clark</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D. R.</given-names>
            <surname>Wilson</surname>
          </string-name>
          ,
          <article-title>A comparison of commercial andmilitary computer security policies</article-title>
          ,
          <source>in: IEEE Symposium on Security and Privacy</source>
          ,
          <year>1987</year>
          , pp.
          <fpage>184</fpage>
          -
          <lpage>184</lpage>
          . doi:
          <volume>10</volume>
          .1109/SP.
          <year>1987</year>
          .
          <volume>10001</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>J.</given-names>
            <surname>Richer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Jones</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Bradley</surname>
          </string-name>
          , M. MachulakP,.
          <source>Hunt, Oauth</source>
          <volume>2</volume>
          .0 dynamicclient registration protocol,
          <year>2015</year>
          . URL: https://datatracker.ietf.org/doc/html/rfc7591.
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>R.</given-names>
            <surname>Mayrhofer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. V.</given-names>
            <surname>Stoep</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Brubaker</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Kralevich</surname>
          </string-name>
          ,
          <article-title>The Android platform security model</article-title>
          ,
          <source>ACM Trans. Priv. Secur</source>
          .
          <volume>24</volume>
          (
          <year>2021</year>
          ). doi:
          <volume>10</volume>
          .1145/3448609.
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>