• Summary of the current state of the tag2upload discussion

    From Russ Allbery@21:1/5 to All on Sat Jun 22 00:30:01 2024
    Over the past week and a half, we've had a sprawling thread of nearly unreadable volume that I am sure many people have stopped reading for very understandable reasons. As probably the largest single contributor to
    that volume, I will attempt to do penance and summarize the thread for
    everyone else.

    I am not one of the tag2upload developers, but I do think tag2upload
    should be deployed and I don't think the FTP team should block it.
    Although I am trying to be factual, this is in no way an unbiased summary.
    It is also quite possible that the summary below contains factual errors,
    as I am painfully aware after having spent a couple of days posting utter nonsense about the git-debrebase workflow. (Apologies again.) This is an
    open invitation for people to correct me and post their own perspective.

    Since this may therefore to turn into another long thread, I encourage
    people who disagree to post their own summaries close to the root of the
    thread so that people who are just trying to track the discussion can get
    a multi-faceted update without digging through a lot of back-and-forth.

    # Progress

    Two FTP team delegates (Joerg and Ansgar) have been participating in a
    detailed discussion of the architecture and merits. That discussion is
    still ongoing.

    ## Authentication protocol change

    The original tag2upload proposal had the tag2upload server performing the OpenPGP signature check on the Git tag, and called for dak to then trust
    that signature. This was one of the primary objectionable parts of the
    design from the FTP team perspective. Based on a suggestion by Jessica
    Clarke to turn that check into an API, there is a modified proposal on the table for tag2upload to add the signed Git tag to its uploaded files and
    for dak to redo the signature check as well as the authorization check
    before accepting the upload. This ensures uploads made either directly to
    dak or via tag2upload go through the same dak authentication and access
    control logic via a different parser.

    Compared to the original tag2upload proposal, this does require some code changes to dak. I believe the corresponding change to tag2upload is not possible today because dak would reject the additional file. But I think
    both the FTP team and the tag2upload developers agree with this change.

    There is further nice work that could be done here with a proper API, but
    that raises other questions about how to do APIs between Debian project infrastructure systems, and I think it can be deferred until later.

    ## dak requirements for the upload

    Two FTP team delegates have agreed (I believe) that the uploader does not
    need to sign the final source package, and that a signature over a hash of
    the files that will be included in the source package would be sufficient.
    This is not enough to unblock tag2upload (discussed below), but I think it indicates a good-faith attempt to find a compromise and I greatly
    appreciate it.

    # Security review

    Multiple people have gone over my accompanying security review (thank you
    very much!) and have provided feedback on my analysis and conclusions.

    Simon Josefsson found a Git hash collision attack that I had not
    considered that avoids the hash hardening after the SHAttered attack by exploiting Git's laziness about revalidating hashes. It's not clear to me
    how feasible that attack is against Salsa even assuming that construction
    of a Git hash collision is possible, but it's worth considering setting transfer.fsckObjects to true (possibly with a whitelist of acceptable
    trivial errors that have no security significance) in tag2upload in order
    to ensure that such an attack is rejected.

    Not every reviewer agrees with my belief that Git hash collisions are not
    worth worrying much about for the next few years. However, I believe each reviewer who raised some objections to that conclusion also said that they didn't think it was a blocking problem for tag2upload deployment.

    # Remaining points of disagreement

    The FTP team's primary concern, as I understand it, is that tag2upload
    uploads will not contain an uploader signature over the exact files that comprise the source package. The uploader signs a Git tag, and the transformation from the signed Git tree to the source package may include synthesizing or modifying files in ways that the uploader does not have in their Git tree in a hashable form. The tag2upload developers consider
    this a critical and necessary degree of freedom in order to handle the
    variety of Git workflows in use in Debian. The FTP team want the exact contents of every file in the source package other than the constructed
    *.dsc file (and maybe the *.orig.tar.gz; I'm not clear on that point) to
    be covered by an uploader signature.

    There is a stark disagreement over the importance of that signature, and
    it appears to be the remaining blocking issue. I have argued that it
    makes little difference from a security standpoint whether the source
    package construction step happens before the uploader signature (the
    current dak upload process) or after the uploader signature (the
    tag2upload process), given that the uploader doesn't (and can't,
    realistically) check the output in either case. I believe at least one
    FTP team delegate disagrees. I personally don't understand the
    disagreement.

    Assuming that some mechanism could be found to handle all useful Git
    workflows without synthesizing or modifying files (an assumption that I
    don't believe is true), this proposed approach of adding an additional
    hash or set of hashes to the uploader-signed object would still require a complete redesign of tag2upload, significant new work in dak, and a
    development of a hasing protocol for the files of the future source
    package that I believe is considerably trickier than it may appear. (I
    believe at least one FTP team delegate disagrees with me about the
    difficulty.) So far as I know, there are no volunteers to do that work.

    This approach would also require an additional local step before upload to perform this new hash, which, depending on the details of the hash construction, may undermine the tag2upload design goal of requiring
    minimal local software apart from Git and an OpenPGP implementation.

    # Other resolved questions

    There were several other questions that came up in the course of the
    discussion that I think have been resolved to everyone's satisfaction.

    * There was considerable early confusion about the role of the dgit-repos
    Git archive and whether it was a competitor to Salsa. This is an
    append-only Git server that holds only Debian packages as uploaded to
    the archive. Its role is to provide a permanent archive of the
    corresponding signed Git tree, akin to snapshot.debian.org for the
    archive. It does not support the features that Salsa supports and is
    complementary to, not competitive with, Salsa.

    * There was some confusion about the relationship between dgit and
    tag2upload. tag2upload uses dgit for some operations and is developed
    in the same repository, but it is unrelated from the uploader
    perspective. One does not have to use dgit to use tag2upload.

    * There was disagreement over the extent to which tag2upload would have
    helped against the xz-utils attack. I believe the conclusion that
    discussion reached is that the critical workflow change to protect
    against the attack mechanism used there is to only trust upstream Git
    tags rather than tarball releases. tag2upload by design does not
    require that workflow change, although it does make it easier.

    # Disclaimer

    Again, this summary is only my opinion. I am not a tag2upload maintainer,
    nor is the draft GR my GR. I cannot speak for any of the parties involved here, only for myself.

    --
    Russ Allbery ([email protected]) <https://www.eyrie.org/~eagle/>

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Soren Stoutner@21:1/5 to All on Fri Jun 21 22:36:22 2024
    Russ,

    Thank you for this summary.

    On Friday, June 21, 2024 3:24:58 PM MST Russ Allbery wrote:
    There is a stark disagreement over the importance of that signature, and
    it appears to be the remaining blocking issue. I have argued that it
    makes little difference from a security standpoint whether the source
    package construction step happens before the uploader signature (the
    current dak upload process) or after the uploader signature (the
    tag2upload process), given that the uploader doesn't (and can't, realistically) check the output in either case. I believe at least one
    FTP team delegate disagrees. I personally don't understand the
    disagreement.

    Let me attempt to explain why I perceive a significant security improvement between an implementation where the DD signs a manifest of all the source files
    and one where that doesn’t happen.

    Let me begin by saying that I perceive three broad goals with tag2upload as it has been envisioned by those who have been developing it.

    1. Maintain a complete history of the source of Debian packages in Git, including their Git history.
    2. Create the source packages in a controlled, centralized environment.
    3. Eliminate the need for a fat client or any special Debian tooling on the DD’s end, and handle everything with standard Git tools.

    I find points 1 and 2 to be compelling. I don’t personally find point 3 to be
    compelling. I could take it or leave it in the final tag2upload implementation.

    As a point of contrast, I think that the developers of tag2upload consider point 3 to be the most important of their design goals. They also like points 1 and 2, but they never would have started down the path of developing tag2upload if it wasn’t for the benefits they feel point 3 offers.

    From a purely security-conscious perspective, I think tag2upload is significantly improved if point 3 is dropped as an objective of tag2upload.

    Currently, source packages are built on DD machines. There is a security- attack surface in this design, in that, if a DD’s machine is compromised, it could insert malicious code into the package at the point it was being built. The DD would be unlikely to notice the introduction of such code and would sign the package and upload it to Debian without realizing that the source tarball had been changed from the copy they acquired from upstream or the packaging they were working on in Salsa (or some other forge). Although I am not aware of any instance of this happening, the xz-utils compromise has made everyone more conscious of this possibility.

    The current tag2upload implementation improves on this design by centralizing the construction of the source package in a controlled environment on Debian infrastructure in what has been described as putting all your eggs in one basket. Instead of having a thousand DD machines constructing the source packages, some of which have very high security and some of which might not, there is one tag2upload system to harden and protect.

    However, whenever assets are centralized, it also means that the power of a successful exploit increases. Right now, if someone compromises a DD’s machine, they can only insert malicious code into the packages that DD uploads. But if someone were ever able to compromise the tag2upload server, they could insert malicious code into all the packages that it processes.

    One of the answers to this concern is to setup a second tag2upload server that checks the work of the first. A reproducible build, if you will. If only one of the tab2upload systems is compromised, it will not be able to produce packages that are trusted by the rest of Debian.

    Adding a second centralized system is better than having a single point of security failure. But there is a gold standard that is better than that. Requiring agreement between both a centralized and a distributed system. This is where client signing of the entire source manifest comes into play.

    If both the DD's machine and tag2upload have to sign a manifest of the source package, it makes it much more difficult for an attacker to insert malicious code into the package. In the previous example with only one tag2upload server, compromising a single machine would provide the attacker this ability for all packages processed through tag2upload. In the case of having two, redundant, tag2upload servers, only two systems need to be compromised. But in the scenario of requiring both a centralized system and a distributed system involved, an attacker that compromised both the tag2upload system and a DD’s machine could only alter packages that one DD uploads. A full compromise
    of Debian would require the attacker to compromise the centralized tag2upload server (or servers in the case of reproducible builds) and a thousand DD machines.

    Requiring both centralized and distributed signing of the package manifest also completely eliminates a whole series of potential weaknesses described in Russ’ s security audit. It removes any concern about SHA1 weakness in Git. It eliminates all the potential race conditions with replacing Git trees or other concerns with Git collisions. It removes any concern about the admins of tag2upload being able to do anything untoward. It almost removes any concerns about a Salsa admin being able to do anything untoward (I will discuss the one exception below[1]). It basically removes almost all the possible *man-in-the-middle* attacks that could be executed by 1) a malicious packager requesting sponsorship, 2) a malicious Salsa admin, 3) a malicious attacker who gains admin access to Salsa, 4) a malicious tag2upload admin, 5) a malicious attacker who gains admin access to the tag2upload servers, and 6) someone who compromises the DD’s system[2]. In short, I would consider that having the DD sign the manifest of the source package improves the security posture of the proposed tag2upload service by about 2 orders of magnitude.

    The question before us now--the one this GR proposes to the general Debian community--is if this increased security is worth dropping one of the original goals of the tag2upload developers. There are probably some people who find the idea of simply being able to sign a Git tag and having the source package built for them by Debian infrastructure without the need for their system to do anything else to be so advantageous that it is worth an implementation that is less robust from a security perspective. There are others, like me, who don’t see this aspect of tag2upload’s current design to be that important, and
    would rather have a system where the DD’s machine would need to generate enough of the source package to sign a full manifest, add that to the signed Git tag, and then have the process repeated by the tag2upload’s server(s) in a
    controlled environment.

    [1] The one attack scenario I can think of that client-side source package manifest signing does not prevent is the following, which has been discussed in the thread to some degree. Someone with admin access to Salsa could modify the system to display a clean set of code in the web interface, but presents a malicious set of code when cloned. Assuming that the DD does all of their development work using the Salsa web interface, they would never see the malicious code. But, if both their system and tag2upload cloned the repository to build the source code, and if they used their cloned version to sign the tag, the malicious code would be inserted into the system under the radar.

    Note that for this attack to work, the DD would have to pull from Salsa without reviewing the source code on their own system. This might be unlikely with packages that are maintained by one DD, as they might only push to Salsa.
    In that case, their manifest would be different from tag2upload’s. But in the
    case of active team maintenance, the developers would both push and pull and could end up signing unreviewed, compromised code.

    I haven’t, so far, been able to think up a good defence against this type of attack, short of doing all development work on the DD’s machine instead of Salsa’s web interface (which is how I generally work now, but isn’t how everyone does things). This attack would probably be difficult to pull off, especially for an extended period of time, without someone noticing. But it isn’t outside the realm of possibility.

    [2] Note that all of the discussion in this email about the insertion of malicious code into the package is in reference to the problem raised by the xz-utils compromise, which was that, when someone looked at what they thought was the source code (the Git repository) the didn’t see (all of) the malicious
    code. It was inserted at a later step into the source tarball in a manner that didn’t seem concerning on the face. The entire discussion above about an
    attacker being able to insert malicious code into the source means that they do so in such a way that it doesn’t appear in the code the DD reviews when they are preparing the package, but does end up in the source tarball that is uploaded to dak. Nothing about this design protects against 1) malicious code inserted upstream that is visible to the DD, but that thy either don’t review
    or don’t recognize as being malicious, or 2) malicious code intentionally inserted by the DD that they sign and upload with the intent of compromising Debian.

    --
    Soren Stoutner
    [email protected]
    -----BEGIN PGP SIGNATURE-----

    iQIzBAABCgAdFiEEJKVN2yNUZnlcqOI+wufLJ66wtgMFAmZ2YtYACgkQwufLJ66w tgNt+BAAjeMSdpREdJt8U88+dJJiueApM7VbKfhUfb0CsMNA5dI4LfxMw1CE4eaF a1bZVnYJIpaSmYp0v1Z+35TilbWYuJx7d75QSHDA73tjRpyqg1HIRMZbt5DqOy+E 8D04knHIdbE3UhkY67Ez1B7G+2GtyycTWga7kT3HCP/txFQs6jfZSAKAzON00mMb mgnGtj3quitRpd2vnOepEPMxyPrzpdNUMDHDP6CXDuTr8RpjtriFoeswXS4Ujku8 8L8DvKds5e34hzlSc0PY5Q3HZPibSn8wRQdq2ZEvPYIPT1R408eenB3phOEx18L0 PAstsQXtWoXFAh9W4AMS0BJuhl2qHH9h0apbc9S2BYZBOPmnSonzsHseHeYhXvYQ C250V7xAEjhbPlFWBho6lROPnIpCnE+qs1dNP/x5ojsHwnTXU3GKKtQVQt9UAJCQ v6VEM3fGTx9JpJlOmgt9LL1KcOKpDUR1QpbvjAB2H1H+pWZDBt21GmDA8Li1k5Co QLOTjE4MWwa07MQQRvZFywUyoIDv8nJume3fNgNw0lidCeop9drsBU5koSXUTGk6 llnG7itJDimT35EZr/TMiDqlvCw3vQmKjNz4VrrWSMtIaUO2UNzz0pGdbZFsdVIH 5gD8IMO0QikiNrVX8RwwQV/QEU8i7dkwABvAzQyBgpydrNBoIIg=
    =Abce
    -----END PGP SIGNATURE-----

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Ian Jackson@21:1/5 to Russ Allbery on Sat Jun 22 15:40:01 2024
    Russ Allbery writes ("Summary of the current state of the tag2upload discussion"):
    Again, this summary is only my opinion. I am not a tag2upload maintainer, nor is the draft GR my GR. I cannot speak for any of the parties involved here, only for myself.

    As one of the tag2upload developers, I think that's a good summary.
    I didn't spot anything in it I wanted to disagree with.

    Thanks, and thanks for all your hard work.

    Ian.

    --
    Ian Jackson <[email protected]> These opinions are my own.

    Pronouns: they/he. If I emailed you from @fyvzl.net or @evade.org.uk,
    that is a private address which bypasses my fierce spamfilter.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Ian Jackson@21:1/5 to Matthias Urlichs on Sat Jun 22 15:50:01 2024
    Matthias Urlichs writes ("Re: Summary of the current state of the tag2upload discussion"):
    On 22.06.24 07:36, Soren Stoutner wrote:
    1. Maintain a complete history of the source of Debian packages in Git, including their Git history.
    2. Create the source packages in a controlled, centralized environment.
    3. Eliminate the need for a fat client or any special Debian tooling on the
    DD’s end, and handle everything with standard Git tools.
    ...
    There is literally nothing for tag2upload to do when (3) falls away
    because these goals do not require dgit to tag *or* upload anything
    (beyond the simple, unsigned tagging and uploading that it already does,
    of course).

    "dgit push-source" already does (1). Nothing to do here.

    To achieve (2) it could simply add a field to the .dsc with the hash of
    the git commit that it already pushes to its append-only archive.

    This field is already there in the .dsc. It's the "Dgit:" field.
    Picking a random one of my packages, you can see it here:
    https://deb.debian.org/debian/pool/main/s/secnet/secnet_0.6.7.dsc

    (FTR I basically agree with the rest of your message.)

    Ian.

    --
    Ian Jackson <[email protected]> These opinions are my own.

    Pronouns: they/he. If I emailed you from @fyvzl.net or @evade.org.uk,
    that is a private address which bypasses my fierce spamfilter.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Micha Lenk@21:1/5 to All on Sat Jun 22 22:20:01 2024
    Hi all,

    thank you, Russ, for summarizing the discussion so far. As far as it represents the tag2upload proponents point of view, I think it is a fair summary of what was said so far. A few aspects seem to be missing from my point of view, so I'd like to share my own opinion (I don't know whether it qualifies as a reasonable complement to Russ's summary).

    Russ's summary seems to miss the questions Paul R. Tagliamonte raised in [1] and extending on in [2]. In essence, what do we consider as source after all?

    [1.] https://lists.debian.org/debian-vote/2024/06/msg00363.html
    [2.] https://lists.debian.org/debian-vote/2024/06/msg00424.html

    The discussion that happened around these questions resonated very well with me because in my point of view tag2upload is aiming at nothing less than a (maybe long due) paradign shift. I'll outline in the next two paragraphs what that paradigm shift is.

    In general our traditional approach of handling source packages is, we upload upstream's source achive plus our modifications (patches) and instructions how to build it (the packaging). Our tooling (basically dpkg-source) reference all these from a Debian source control file, the .dsc file. The content we distribute within the archive is basically the aggregate of all such uploaded contributions of all Debian developers. We do all of this in the open, i.e. we even distribute the GPG-signed .dsc files so that everyone is able to verify source integrity and which individual Debian developer uploaded the source -- even if the archive infrastructure itself was untrustworthy.

    From what I understood so far, the overall promise tag2upload tries to make is to simplify package maintenance to an extent that we offload the separation of the patches and the packaging from the upstream source to Git. Once we consider the code/packaging ready for distribution as binary packages to end users, a simple GPG-signed Git tag is sufficient to start all the admirable machinery that in the end provides binary Debian packages end users can install using their package manager. The GPG-signed Git tag allows everyone to verify integrity and authorship of a given Git tree, leading to binary packages.

    In the tag2upload concept, the uploaded files referenced by the .dsc file and the .dsc file itself are implicitly considered a second class citizen of the Debian ecosystem -- a technical necessity anonymously signed by some tag2upload service. I for one are not convinced yet that we really have to and should sacrifice the current verifyability down to the individual Debian developers, just because we want to work with Git directly. We shouldn't have to give up on some distributed nature of end-to-end verifyability within the supply chain from source code to Debian binary packages.

    The FTP masters disapprove the current approach, apparently based on similar arguments, merely framed in the context of authorization and integrity checking logic. Yet, the FTP masters seem to rather support the general idea and would like to see an approach where dak and our tools like dpkg-source are directly working with the GPG-signed Git tags. Some questions Ansgar and Joerg raised are pointing in that direction (see [3], [4], [5], [6], [7]).

    [3.] https://lists.debian.org/debian-vote/2024/06/msg00008.html
    [4.] https://lists.debian.org/debian-vote/2024/06/msg00371.html
    [5.] https://lists.debian.org/debian-vote/2024/06/msg00220.html
    [6.] https://lists.debian.org/debian-vote/2024/06/msg00366.html
    [7.] https://lists.debian.org/debian-vote/2024/06/msg00402.html

    In my perception the tag2upload proponents strive to support all kinds of Git workflows. This carries quite some complexity, and all this just for the sake of generating the .dsc file for uploading, partially from more than just one Git commit. If we want to support maintaining Debian packages using pure Git, let's embrace that paradigm shift entirely. Assuming dpkg-source could eventually directly extract (e.g. git pull) the source as needed for building from a Git tag, do we really need all that complexity?

    Still the tag2upload proponents dismiss a suggestion to also take changing the source format or tooling into account as an unfeasible "boil-the-ocean approach" (see [8]).

    [8.] https://lists.debian.org/debian-vote/2024/06/msg00446.html

    Also, shouldn't a supposedly superior maintenance approach be able to attract substantial adoption just by convincing package maintainers with the convenience of use and features, even if it requires potentially intrusive packaging changes like changing source formats? Debhelper seems to have successfully followed such a path in the past. Why shouldn't it work here too?


    With the available information today, FTP master's pushback arguments seem to be backed well by the delegation. Given their willingness to find a solution, overruling their decision by a GR seems to be rather disproportionate.


    Kind regards,
    Micha

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Russ Allbery@21:1/5 to Micha Lenk on Sun Jun 23 04:50:01 2024
    Micha Lenk <[email protected]> writes:

    thank you, Russ, for summarizing the discussion so far. As far as it represents the tag2upload proponents point of view, I think it is a fair summary of what was said so far. A few aspects seem to be missing from
    my point of view, so I'd like to share my own opinion (I don't know
    whether it qualifies as a reasonable complement to Russ's summary).

    Thank you for this! I'm very glad to see other people posting summaries
    of where they think the discussion is at, and I think this was a good
    addition. There are a few things about which we disagree (for example, I
    think it's incorrect to say that tag2upload would sacrifice source package verifiability down to individual developers, although it's true that it
    changes the shape of that verification), but I think those are topics
    about which I don't have anything new to say.

    I did want to address your point about a more comprehensive revision of
    how we think about source packages, though, because I did indeed omit that
    from my summary, there was a reason, and I probably should have said what
    the reason was.

    Russ's summary seems to miss the questions Paul R. Tagliamonte raised in
    [1] and extending on in [2]. In essence, what do we consider as source
    after all?

    [1.] https://lists.debian.org/debian-vote/2024/06/msg00363.html
    [2.] https://lists.debian.org/debian-vote/2024/06/msg00424.html

    The reason why I didn't participate in that discussion, and the reason why
    I didn't try to summarize it, is that I don't believe anything will ever
    come of it. I don't think these more radical approaches will ever be implemented, and if implemented, I don't think Debian will ever deploy
    them. Or, at least, that none of this will happen in any reasonable time frame.

    I know this sounds very negative, and I don't mean this to be stop energy
    for people who want to work on this. I would be absolutely thrilled to be proven wrong. That would make me very happy. And therefore I stay out of
    the discussion so that I don't just inject negativity.

    But I've seen this pattern before. I remember 3.0 (git). And I remember
    a lot of other discussions over the years that didn't get as far as 3.0
    (git) got, discussions full of grand ideas and not much implementation follow-through.

    Debian is full of people who love to design things and love to talk about
    other people's designs and love to look at the big picture. But it's one
    thing to design something, it's another thing to implement it, and it's
    yet another thing to deploy it, and Debian is passively hostile to change
    of this type to a degree that I don't think people realize until they've
    tried to do it.

    Worse, this is frequently used, as I feel is happening to some degree
    here, as a justification for blocking work that has already been done.

    I do think we should review major changes to ensure that they don't create serious new problems, and we have also failed on that score in the past.
    That's part of why I invested a lot of effort in trying to help check that
    in this case. And you may disagree with my evaluation there. But what I
    would ask is to separate that from the question of what we ideally should
    do, separate it from how you would like to see the work done, and be very precise and clear about whether there is an actual, serious problem. Not
    just "less than ideal" or "not any better than what we already have" or
    "we could solve so many more problems with a more radical design."

    We should err on the side of letting people deploy their work. If they
    have spent a long time working on a problem, with actual code, tested with
    real packages, we should default to believing that they are correct in
    their analysis of the problem. Or at least correct enough to use their
    work, even if it falls short of what we hope we can eventually do.

    Blocking people's work beause it's actively dangerous, sure, sometimes we
    have to do that and it sucks but it may make sense. But blocking people's
    work because it didn't solve a larger problem than they wanted to solve,
    or cared more about backward compatibility than one might wish, or changed
    a security model in a way that's a little better in places and a little
    worse than others... that just feels wrong to me. Rude. Dismissive. And self-defeating for Debian as a whole.

    I do not in any way want to interfere with the work of people who want to tackle a bigger problem. There is definitely a bigger problem here, and
    there are things that we could do way better than we do today. I
    personally have been sufficiently burned on this front that I am no longer participating, but I will cheer you on from the sidelines, very sincerely.
    I want you to succeed.

    But, in the meantime, I want to deploy the work that is already done and
    that will make my life better today. And I would ask people to consider
    the serious possibility, based on a lot of past evidence, that saying no
    means we get nothing at all, because the people who could have evolved
    their work into something better took no for an answer and found something
    else to do with their time.

    --
    Russ Allbery ([email protected]) <https://www.eyrie.org/~eagle/>

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Matthias Urlichs@21:1/5 to All on Sun Jun 23 10:40:02 2024
    This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --------------0xlWVTs6PPlOVzcqUT0X250Z
    Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64

    T24gMjMuMDYuMjQgMDQ6NDUsIFJ1c3MgQWxsYmVyeSB3cm90ZToNCj4gQmxvY2tpbmcgcGVv cGxlJ3Mgd29yayBiZWF1c2UgaXQncyBhY3RpdmVseSBkYW5nZXJvdXMsIHN1cmUsIHNvbWV0 aW1lcyB3ZQ0KPiBoYXZlIHRvIGRvIHRoYXQgYW5kIGl0IHN1Y2tzIGJ1dCBpdCBtYXkgbWFr ZSBzZW5zZS4gIEJ1dCBibG9ja2luZyBwZW9wbGUncw0KPiB3b3JrIGJlY2F1c2UgaXQgZGlk bid0IHNvbHZlIGEgbGFyZ2VyIHByb2JsZW0gdGhhbiB0aGV5IHdhbnRlZCB0byBzb2x2ZSwN Cj4gb3IgY2FyZWQgbW9yZSBhYm91dCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHRoYW4gb25l IG1pZ2h0IHdpc2gsIG9yIGNoYW5nZWQNCj4gYSBzZWN1cml0eSBtb2RlbCBpbiBhIHdheSB0 aGF0J3MgYSBsaXR0bGUgYmV0dGVyIGluIHBsYWNlcyBhbmQgYSBsaXR0bGUNCj4gd29yc2Ug dGhhbiBvdGhlcnMuLi4NCg0K4oCmIG9yIGJlY2F1c2UgaXQncyBwZXJjZWl2ZWQgYXMgdGhl IGZpcnN0IHN0ZXAgb24gYSBqb3VybmV5IHRoYXQgDQpldmVudHVhbGx5IHdvdWxkIG9ic29s ZXRpemUgYSBsb3Qgb2YgZXhpc3RpbmcgY29kZSwgc3RydWN0dXJlLCANCmdvdmVybmFuY2Ug YW5kL29yIHdoYXRldmVyLWVsc2UgdGhleSd2ZSBzcGVudCBhIGhlYXAgb2YgdGltZSBhbmQg ZW5lcmd5IG9uIOKApg0KDQpTdW5rIENvc3QgRmFsbGFjeSwgaW4gb3RoZXIgd29yZHMuDQoN CkknbSBub3Qgc2F5aW5nIHRoYXQgdGhhdCdzIGV2ZW4gcGFydCBvZiB0aGUgcmVhc29uIGJl aGluZCB0aGUgY3VycmVudCANCmRpc2FncmVlbWVudCAqYnV0KiBJJ3ZlIHNlZW4gaXQgaGFw cGVuaW5nIHRvbyBvZnRlbiwgaW4gbm9uLURlYmlhbiANCmNvbnRleHQgZm9yIHRoZSBtb3N0 IHBhcnQsIGFuZCB0aHVzIG1heXl5eWJlIHRoZSBwZW9wbGUgaW52b2x2ZWQgbWlnaHQgDQp3 YW50IHRvIHRha2UgYSBoYXJkIGxvb2sgYXQgdGhlbXNlbHZlcyBhbmQgdGhlaXIgbW90aXZl cyBhbnl3YXkg4oCmPw0KDQo+ICAgdGhhdCBqdXN0IGZlZWxzIHdyb25nIHRvIG1lLiAgUnVk ZS4gIERpc21pc3NpdmUuICBBbmQNCj4gc2VsZi1kZWZlYXRpbmcgZm9yIERlYmlhbiBhcyBh IHdob2xlLg0KDQoxMDAlIGFncmVlLiBUaG91Z2ggYWdhaW46IHRoYXQgKmZlZWxzKiBydWRl IGFuZCBkaXNtaXNzaXZlLiBJJ20gKm5vdCogDQphc2NyaWJpbmcgKmludGVudCogdG8gYmUg cnVkZSBvciBkaXNtaXNzaXZlIHRvIGFueWJvZHkgaGVyZSwgYW5kIEknbSANCnN1cmUgUnVz cyBpc24ndCBlaXRoZXIuDQoNCi0tIA0KLS0gcmVnYXJkcw0KLS0gDQotLSBNYXR0aGlhcyBV cmxpY2hzDQoNCg==

    --------------0xlWVTs6PPlOVzcqUT0X250Z--

    -----BEGIN PGP SIGNATURE-----

    wsF5BAABCAAjFiEEr9eXgvO67AILKKGfcs+OXiW0wpMFAmZ31ykFAwAAAAAACgkQcs+OXiW0wpPM ZhAAh4I1kaGubj3FW6GKXIoPo/peoSj6bOmKIAdxfJGaAV5awdslb7A9fjl9TZr3JX0MWJQohZOt xz5+9weMsVPNwHfhAKVDW1dZlVTZNJiBf99XewRw1kn8gVwyiepdzbO3qem6XQVCrcBTLCU2v6Lz x2V44JBv3mUTZuvpsqeVY+KkOF0eHWXofYuUIem5DnAArGH/I7cwfp1GBFC9raLDZ8d7heKhbQqu wa0VdjaXS9jWmFOHQN8kL8HHl9VG7bQO0GHOfewGRrM2RQApa2PuepZ6rB8nodaLBdDLa8Hh0N6U 0Ob3T1puaQKrh+kQgzb5hjfR3Eoex6X8SBqWunv4fQnKmf2Pl/ZxqxhQVckSG3cuXK0OrfKbPue/ R1H3F4EPANPAR03jJlYWic0Nvf/pWWpZuT/rvHjgG7pYA4HyO450p9FyMJtVzHCstO1gavl7CapH bK04ZiTJ9JtihU4gAE+26BI9YkUd04Qf4jwmVWNoyv+cQ6fCehjh1bUmQFrL80DUz5HoumzDjtcj T33CbBt6LfhihFmFk/Afx6WzWam7Dz6ilfYQVX49vDiU9OYNcwzEGDc63Bnr+T2WO/E/qZz6zoeD p1pBZ7Fgwb4xQwsKfIGh1e1zryesmUDv+I0gDVNyW+fNv3ecDAR9DqguuTgbuYPZnATL2Q/qXwRk 9+A=
    =rd+D
    -----END PGP SIGNATURE-----

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Russ Allbery@21:1/5 to Matthias Urlichs on Sun Jun 23 16:50:02 2024
    Matthias Urlichs <[email protected]> writes:
    On 23.06.24 04:45, Russ Allbery wrote:

    that just feels wrong to me. Rude. Dismissive. And self-defeating
    for Debian as a whole.

    100% agree. Though again: that *feels* rude and dismissive. I'm *not* ascribing *intent* to be rude or dismissive to anybody here, and I'm sure Russ isn't either.

    Yes, thank you, that's an important clarification and I agree. I do not
    want to speculate about other people's intent, and I think it's very easy
    to get mentally stuck in a corner when new work changes an invariant that
    you believed was important, even if it comes with an argument for why that invariant isn't as important as you thought.

    --
    Russ Allbery ([email protected]) <https://www.eyrie.org/~eagle/>

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Scott Kitterman@21:1/5 to All on Sun Jun 23 11:27:47 2024
    On Sunday, June 23, 2024 10:46:33 AM EDT Russ Allbery wrote:
    Matthias Urlichs <[email protected]> writes:
    On 23.06.24 04:45, Russ Allbery wrote:
    that just feels wrong to me. Rude. Dismissive. And self-defeating
    for Debian as a whole.

    100% agree. Though again: that *feels* rude and dismissive. I'm *not* ascribing *intent* to be rude or dismissive to anybody here, and I'm sure Russ isn't either.

    Yes, thank you, that's an important clarification and I agree. I do not
    want to speculate about other people's intent, and I think it's very easy
    to get mentally stuck in a corner when new work changes an invariant that
    you believed was important, even if it comes with an argument for why that invariant isn't as important as you thought.

    I think that can work both ways. I am old enough to have seen many instances of some new hotness coming along and any objection to it being swept aside because it was clear that the people objecting just didn't understand why the new hotness was so wonderful and why their concerns didn't matter anymore. My experience has been that when those concerns have been ignored (they usually are), things often don't end well.

    Scott K
    -----BEGIN PGP SIGNATURE-----

    iQIzBAABCgAdFiEE53Kb/76FQA/u7iOxeNfe+5rVmvEFAmZ4PvMACgkQeNfe+5rV mvFECg//fbzJefF9g0g+kcu5Vo7mo3gb2aCtCR6q2ydDk+LMYyN7k5SviTuJ4YPA UqCFT2i4lkpt0jF6XZnoCzHNcSriUS2R5mKn9qHY2+qXQUXEsnWZj96xGpEuw7UO XSmTnqL2+9pIRa3g8GeAkTChtbp/i/L040bS1wrbPPCkfcni0hc/nmCULe/DjVET KQQ//Qs7cM+aBJUVtaDLixVa0oE4iAvfBD4aiLyLjrcrt7wAIdnwnrAK/r3uW4+T ckewVceAtoIFUyvCuxSlXCKVOAyVMDDg+YFF0s2FY6OY9N9xkiqxt5rWWcHpEP0N vHHrvOPbeTovd+ljn3SZeEGqum7+nMoKXgQSesHOjgw9TEfun8Amrf02dSi/YvtW igjn/B+oq4p9WvaqMVqwSM9HZIs6Z6HyfONXXcWgLOT27oUFcDNP8OjsvcccEUpr rEVmgxvB4TMuoEh//Midgu+7QcnEiAiAQCNlUAXseEkiFvN6nX2P1MqlRXpP+dXq ZACX/qGZkKYoBFmTUVEBM6FDhSfpTgkEEhXsUwqh9hTYrhpwmqyUCeWVPWqq5R4U vRpua5zKlSPC8gUMEokaKrxxpmB6vnLFr0ASIvyoNK69I9zgxPsRcThQA9J/tRST QaaJB4Riu46eXYEBD3oOtWqfYgTDn1tra0jj7J5FC9fnPyfgOlg=
    =gDaD
    -----END PGP SIGNATURE-----

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Russ Allbery@21:1/5 to Scott Kitterman on Sun Jun 23 17:50:01 2024
    Scott Kitterman <[email protected]> writes:

    I think that can work both ways. I am old enough to have seen many
    instances of some new hotness coming along and any objection to it being swept aside because it was clear that the people objecting just didn't understand why the new hotness was so wonderful and why their concerns
    didn't matter anymore. My experience has been that when those concerns
    have been ignored (they usually are), things often don't end well.

    I'm not quite sure how to phrase this (mostly because I want to use much stronger language), but I find the belief that what we have just done over
    the past week and a half somehow constitutes ignoring concerns to be
    rather remarkable.

    A whole lot of other people have been involved in this discussion and deep
    in the analysis, but for the moment, I'll just speak for myself here.

    I have, to the absolute best of my ability, taken every concern that
    people have raised very seriously. I have spelled out exactly where I
    agree with them and where I disagree with them, I have tried to explain in great detail precisely why I disagree with the concerns that I disagree
    with, and I posted an entire formal security analysis to that effect. In
    the places where I was wrong, I have tried to say openly that I was wrong
    and go back and correct the mistaken things that I said.

    Having all of that quite significant work, which has substantially eaten
    into a much-needed vacation and which has literally kept me up nights, dismissed as ignoring concerns is....

    Well, I guess I don't have words for that. At least not ones that I want
    to write on this mailing list.

    You are entitled to believe that my analysis is wrong. You are not
    entitled to claim that I didn't do the work that I did, quite publicly and openly, right here on this mailing list for everyone to see.

    --
    Russ Allbery ([email protected]) <https://www.eyrie.org/~eagle/>

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Scott Kitterman@21:1/5 to All on Sun Jun 23 12:16:34 2024
    On Sunday, June 23, 2024 11:43:47 AM EDT Russ Allbery wrote:
    Scott Kitterman <[email protected]> writes:
    I think that can work both ways. I am old enough to have seen many instances of some new hotness coming along and any objection to it being swept aside because it was clear that the people objecting just didn't understand why the new hotness was so wonderful and why their concerns didn't matter anymore. My experience has been that when those concerns have been ignored (they usually are), things often don't end well.

    I'm not quite sure how to phrase this (mostly because I want to use much stronger language), but I find the belief that what we have just done over the past week and a half somehow constitutes ignoring concerns to be
    rather remarkable.

    A whole lot of other people have been involved in this discussion and deep
    in the analysis, but for the moment, I'll just speak for myself here.

    I have, to the absolute best of my ability, taken every concern that
    people have raised very seriously. I have spelled out exactly where I
    agree with them and where I disagree with them, I have tried to explain in great detail precisely why I disagree with the concerns that I disagree
    with, and I posted an entire formal security analysis to that effect. In
    the places where I was wrong, I have tried to say openly that I was wrong
    and go back and correct the mistaken things that I said.

    Having all of that quite significant work, which has substantially eaten
    into a much-needed vacation and which has literally kept me up nights, dismissed as ignoring concerns is....

    Well, I guess I don't have words for that. At least not ones that I want
    to write on this mailing list.

    You are entitled to believe that my analysis is wrong. You are not
    entitled to claim that I didn't do the work that I did, quite publicly and openly, right here on this mailing list for everyone to see.

    This was not intended as a personal attack on you. I think you've been very diligent in your work and clearly you are trying to be careful to address concerns. I don't think that's true of everyone involved in this
    conversation.

    My impression is that there's still a communication gap between people. I think it's, mostly, in good faith, but it's there.

    As an example, I think the fact that I can download any source package in the archive and cryptographically verify who uploaded it and that it's unmodified from what was uploaded is an important property of our current archive structure. IIRC, you've claimed it's not. I don't think either of us has a very good understanding of why the other believes that. I think for both of
    us it's just too obviously true/not true to be easy to explain.

    Scott K

    P.S. FWIW, the emotional reaction I infer you had when you read my last message on this topic is pretty close to the one I had when I read the message I was replying to.
    -----BEGIN PGP SIGNATURE-----

    iQIzBAABCgAdFiEE53Kb/76FQA/u7iOxeNfe+5rVmvEFAmZ4SmIACgkQeNfe+5rV mvETXxAAvAgG3AnWupBqZ3ij0YBv1XPJkrbAJclbQVstsex7f0P3Ihl8FhR8xQ00 NhaJAX6Z+JRNm2TSBOgnj1nPI4D2EbUakkArk/LojIxfTGGrT7VVFAfyKsHyUvMf FYsynhE9rwYmd/SXDJxaU9iLAQXiNA4/eEMinvuUjtPfxEQQ+qgjqxaQ06hy9ZVX ubHxwe9VdcP7hs9TadMqnaKMaBrSyyWZIrZv15oRa0faiiPMxe1i8YtNfrZPQMrM JVOFZ+Tt/HyDd5dyOZjhw17YSk1l/mRx4+whCIFrcAxZa8X06pbQU2qHVrASIqeU cFqfaW7HxX4C/Oq+rCapeuHxblTxqTJZmhA3QaBBpR1QNjw23BXRDLf5A3wRS6Vz xgzySjzzNPorwNzVtaEVpHKgq0op51jnCRXWT5plpQz3SEMcWy8Blmr+qyNUihSY qftiYZhVGzv+pVovHGkg+QVV2ndzNMizserxOW5YEgJrf8Zo4XkIKc3xKWM8d4l4 wPx0HQAAhzVy+H85IzZKMjKt47yHxgSjvBN/GNxmxtgKSwFxazMYa90lM/9/pQZ9 Xjxymujpaodvj6LluOj267sqWVeLqYahmA0SRV0TDoRC20zInkyNw0cMRiDVG0KF HzLV/ad5yKG7CrXw6QlwFQaihCRcCWAY0XgBR9qw7pE9rom6Ckc=
    =MNQP
    -----END PGP SIGNATURE-----

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Russ Allbery@21:1/5 to Scott Kitterman on Sun Jun 23 20:00:01 2024
    Scott Kitterman <[email protected]> writes:
    On Sunday, June 23, 2024 11:43:47 AM EDT Russ Allbery wrote:

    You are entitled to believe that my analysis is wrong. You are not
    entitled to claim that I didn't do the work that I did, quite publicly
    and openly, right here on this mailing list for everyone to see.

    This was not intended as a personal attack on you. I think you've been
    very diligent in your work and clearly you are trying to be careful to address concerns. I don't think that's true of everyone involved in
    this conversation.

    So rather than attacking me, you were insinuating attacks on other people.
    I'm not sure that's any better.

    If you wanted to know why I have been doing most of the discussion rather
    than Sean and Ian, you could just ask. There is a quite straightforward answer:

    1. I did an independent security review and most of the discussion has
    focused on security and, specifically, on things that I already
    considered in my review. I therefore have opinions that I thought
    about for weeks before the draft GR was posted, and security is my area
    of professional expertise, so it makes sense for me to address those
    concerns.

    2. I have a lot of patience for sprawling Debian arguments like this, and
    I get some amount of personal satisfaction out of keeping them
    constructive. I therefore tend to try to step in and make the
    arguments in a way that I think is the most productive, often before
    someone else can compose a response. I doubtless do this more than I
    actually need to.

    3. I'm a self-destructive idealist with poor boundary control who ends up
    thinking about these discussions whether I want to or not, and since
    I'm already waking up in the middle of the night drafting email
    messages in my head, I may as well write them down so that I can go
    back to sleep? That may be a little harsh on myself. :) But I seem
    to allow Debian to destroy my vacations like clockwork every time I
    take one, so why stop now.

    My impression is that there's still a communication gap between people.
    I think it's, mostly, in good faith, but it's there.

    Oh, probably, but also there is a limit to how much energy one can
    possibly sink into a discussion, so at some point, if the discussion is
    still stuck, we have to accept that we did the best we could and couldn't resolve them and it's time for a GR. I'm not going to rephrase things literally forever until somehow I find the magic phrasing that works and
    gets through the communication gap. There's only so much that's humanly possible.

    As an example, I think the fact that I can download any source package
    in the archive and cryptographically verify who uploaded it and that
    it's unmodified from what was uploaded is an important property of our current archive structure. IIRC, you've claimed it's not. I don't
    think either of us has a very good understanding of why the other
    believes that. I think for both of us it's just too obviously true/not
    true to be easy to explain.

    This is a disagreement. This is not either of us ignoring each other's arguments. This is us failing to convince each other. That's not the
    same thing at all. (And for what it's worth, I don't think it's too
    obviously true to explain. Quite the contrary, I have written at least
    two comprehensive explanations for exactly why I think this. But that
    doesn't mean they were convincing to someone else.)

    I rewrote my original message four times to try to avoid implying the
    category into which the FTP team concerns fell. If I still failed, then I sincerely apologize, but I don't think I did. Here is precisely what I
    said:

    | Blocking people's work beause it's actively dangerous, sure, sometimes
    | we have to do that and it sucks but it may make sense. But blocking
    | people's work because it didn't solve a larger problem than they wanted
    | to solve, or cared more about backward compatibility than one might
    | wish, or changed a security model in a way that's a little better in
    | places and a little worse than others... that just feels wrong to me.
    | Rude. Dismissive. And self-defeating for Debian as a whole.

    There are two options here: actively dangerous, or a bucket of other
    possible objections. I very carefully did not try to classify people's objections into either of those buckets because that wasn't the point.
    This (from an earlier paragraph) was the point:

    | I do think we should review major changes to ensure that they don't
    | create serious new problems, and we have also failed on that score in
    | the past. That's part of why I invested a lot of effort in trying to
    | help check that in this case. And you may disagree with my evaluation
    | there. But what I would ask is to separate that from the question of
    | what we ideally should do, separate it from how you would like to see
    | the work done, and be very precise and clear about whether there is an
    | actual, serious problem. Not just "less than ideal" or "not any better
    | than what we already have" or "we could solve so many more problems with
    | a more radical design."

    In other words, I am arguing for a standard of review for delegate
    decisions.

    If the FTP team truly believes that tag2upload would create serious new problems or is actively dangerous, then I agree that they are applying the correct standard of review. I happen to disagree with that decision and I think I have a lot of evidence to support my disagreement. If the
    tag2upload developers choose to appeal that decision to the project as a
    whole, I know which way I'm voting. But that is the correct standard of
    review and hopefully we could have a GR on the merits.

    If their standard of review is something else, then I am asking them to
    please reconsider. Rejecting work that other people care deeply about has
    a very high cost for Debian and should require correspondingly serious justification.

    P.S. FWIW, the emotional reaction I infer you had when you read my last message on this topic is pretty close to the one I had when I read the message I was replying to.

    I have lots of emotional reactions to messages on threads like this. My emotional reaction is just a fact about me. It doesn't necessarily imply anything about the message that provokes it. It's on me to try to figure
    out where that emotion is coming from, how to deal with it in a
    constructive way, and whether it is justified or driven by some other
    personal reaction.

    In this particular case, I believed, and still believe, that you were
    implying something that I think is clearly false, and in so doing you
    belittled a lot of really difficult work that I and others have been doing
    in a way that I found insulting. I considered that reaction, probably not
    as long as I should have, and I decided you crossed a boundary that I
    wanted to enforce. I declined to edit the emotion out of my message the
    way that I usually try to do because there are times when that emotional reaction is justified and I think this is one of them. This is one of the cases where I think the constructive approach is to make it clear that
    this was an unacceptable way to have a conversation.

    Since the implication was made in public and, were it true, is material to
    an eventual GR, it felt correct to respond in public to rebut it.

    This may have been the wrong choice. This discussion has been a bit of a marathon and I certainly don't have the emotional reserves that I had at
    the start of it.

    --
    Russ Allbery ([email protected]) <https://www.eyrie.org/~eagle/>

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Mathias Behrle@21:1/5 to All on Sun Jun 23 20:50:02 2024
    * Russ Allbery: " Re: Summary of the current state of the tag2upload
    discussion" (Sun, 23 Jun 2024 10:55:00 -0700):


    So rather than attacking me, you were insinuating attacks on other people. I'm not sure that's any better.

    Sorry, I am unable to see a personal attack whatsoever when reading

    """
    I think that can work both ways. I am old enough to have seen many instances of some new hotness coming along and any objection to it being swept aside because it was clear that the people objecting just didn't understand why the new hotness was so wonderful and why their concerns didn't matter anymore. My experience has been that when those concerns have been ignored (they usually are), things often don't end well.
    """

    I think we have seen and still see with usrmerge how difficult and cumbersome the resolution of an initially as simple presented project turned out. I understand the answer of Scott directed in that way, at least this is a reservation of mine.

    I can understand the upcoming frustration of people that have invested a lot of energy in this thread, nevertheless I would like to return to the constructive discussion that evolved in the meantime.

    As was already said by others I would prefer at any rate a solution that could conciliate the demands of the proponents of this draft GR as well as those of the FTPmasters making the GR uncalled-for. IMHO the GR when happening will just result in a lot of frustration on the 'loosing' side.

    Please lets preserve the good energy and hard brain work invested in this thread
    so far, it is too precious to lose.

    Thanks
    Mathias


    --

    Mathias Behrle
    PGP/GnuPG key availabable from any keyserver, ID: 0xD6D09BE48405BBF6
    AC29 7E5C 46B9 D0B6 1C71 7681 D6D0 9BE4 8405 BBF6

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Ian Jackson@21:1/5 to Micha Lenk on Sun Jun 23 20:40:01 2024
    Micha Lenk writes ("Re: Summary of the current state of the tag2upload discussion"):
    In general our traditional approach of handling source packages is,
    we upload upstream's source achive plus our modifications (patches)
    and instructions how to build it (the packaging). Our tooling
    (basically dpkg-source) reference all these from a Debian source
    control file, the .dsc file.

    This is the "Debian source packages in 1993" slide from my 2023 talk.
    This was true, once. Nowadays, for most packages, this is a pretence.

    Most people maintain their packages in git. Many upstreams regard git
    as canonical, and publish tarballs not at all, or only as a
    concession. The proportion of software for which this is true is
    steadily rising. Many teams (including of serious, important and
    longstanding packages) work only in git. The Debian Xen team take
    upstream signed git tags as their input and work entirely in git.

    From what I understood so far, the overall promise tag2upload tries
    to make is to simplify package maintenance to an extent that we
    offload the separation of the patches and the packaging from the
    upstream source to Git.

    I don't think this is the right way to look at it.

    tag2upload formalises and standardises and streamlines the *existing*
    git-based workflows which are in use in Debian today.

    It *does* make it easier to switch to using git, rather than tarballs-and-patches, because it makes the git story better. But the
    git transition is a separate thing, and most packaging teams are
    already much of the way through it.

    In the tag2upload concept, the uploaded files referenced by the
    .dsc file and the .dsc file itself are implicitly considered a
    second class citizen of the Debian ecosystem

    The tag2upload system is part of a *parallel* git-based system for
    handling source code. The intent is that all source packages will be
    available *both* ways (and can be edited using *voth* views).

    So, yes, from the point of view of a maintainer using git,
    tarballs-and-patches are secondary. But that's true already.

    And, conversely, from the point of view of a maintainer using .dscs,
    git is secondary.

    Indeed, right now, git's existence is a kind of open secret. There's
    VCS- headers and salsa and so on. Most people are working in git.
    But it's not official.

    What I am trying to do is put git on the same footing as .dscs: you'll
    be able to use both, with the same level of fidelity and officialness.

    Still the tag2upload proponents dismiss a suggestion to also take
    changing the source format or tooling into account as an unfeasible "boil-the-ocean approach" (see [8]).

    People have been thinking about changing source formats, or making
    other kinds of more radical changes, for many many years.

    Certainly since at least 2013, when Joey Hess and I and some others we
    came up with a plan to improve things that we thought would be
    workable and deployable, unlike the attempts (and suggestions) that
    had been made so far. We've come a long way already, and
    significantly improved some maintainers' workflows.

    Ian.

    --
    Ian Jackson <[email protected]> These opinions are my own.

    Pronouns: they/he. If I emailed you from @fyvzl.net or @evade.org.uk,
    that is a private address which bypasses my fierce spamfilter.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Scott Kitterman@21:1/5 to All on Sun Jun 23 14:41:19 2024
    On Sunday, June 23, 2024 1:55:00 PM EDT Russ Allbery wrote:
    Scott Kitterman <[email protected]> writes:
    On Sunday, June 23, 2024 11:43:47 AM EDT Russ Allbery wrote:
    You are entitled to believe that my analysis is wrong. You are not
    entitled to claim that I didn't do the work that I did, quite publicly
    and openly, right here on this mailing list for everyone to see.

    This was not intended as a personal attack on you. I think you've been very diligent in your work and clearly you are trying to be careful to address concerns. I don't think that's true of everyone involved in
    this conversation.

    So rather than attacking me, you were insinuating attacks on other people. I'm not sure that's any better.

    If you wanted to know why I have been doing most of the discussion rather than Sean and Ian, you could just ask. There is a quite straightforward answer:

    1. I did an independent security review and most of the discussion has
    focused on security and, specifically, on things that I already
    considered in my review. I therefore have opinions that I thought
    about for weeks before the draft GR was posted, and security is my area
    of professional expertise, so it makes sense for me to address those
    concerns.

    2. I have a lot of patience for sprawling Debian arguments like this, and
    I get some amount of personal satisfaction out of keeping them
    constructive. I therefore tend to try to step in and make the
    arguments in a way that I think is the most productive, often before
    someone else can compose a response. I doubtless do this more than I
    actually need to.

    3. I'm a self-destructive idealist with poor boundary control who ends up
    thinking about these discussions whether I want to or not, and since
    I'm already waking up in the middle of the night drafting email
    messages in my head, I may as well write them down so that I can go
    back to sleep? That may be a little harsh on myself. :) But I seem
    to allow Debian to destroy my vacations like clockwork every time I
    take one, so why stop now.

    My impression is that there's still a communication gap between people.
    I think it's, mostly, in good faith, but it's there.

    Oh, probably, but also there is a limit to how much energy one can
    possibly sink into a discussion, so at some point, if the discussion is
    still stuck, we have to accept that we did the best we could and couldn't resolve them and it's time for a GR. I'm not going to rephrase things literally forever until somehow I find the magic phrasing that works and
    gets through the communication gap. There's only so much that's humanly possible.

    As an example, I think the fact that I can download any source package
    in the archive and cryptographically verify who uploaded it and that
    it's unmodified from what was uploaded is an important property of our current archive structure. IIRC, you've claimed it's not. I don't
    think either of us has a very good understanding of why the other
    believes that. I think for both of us it's just too obviously true/not true to be easy to explain.

    This is a disagreement. This is not either of us ignoring each other's arguments. This is us failing to convince each other. That's not the
    same thing at all. (And for what it's worth, I don't think it's too obviously true to explain. Quite the contrary, I have written at least
    two comprehensive explanations for exactly why I think this. But that doesn't mean they were convincing to someone else.)

    I rewrote my original message four times to try to avoid implying the category into which the FTP team concerns fell. If I still failed, then I sincerely apologize, but I don't think I did. Here is precisely what I

    said:
    | Blocking people's work beause it's actively dangerous, sure, sometimes
    | we have to do that and it sucks but it may make sense. But blocking
    | people's work because it didn't solve a larger problem than they wanted
    | to solve, or cared more about backward compatibility than one might
    | wish, or changed a security model in a way that's a little better in
    | places and a little worse than others... that just feels wrong to me.
    | Rude. Dismissive. And self-defeating for Debian as a whole.

    There are two options here: actively dangerous, or a bucket of other
    possible objections. I very carefully did not try to classify people's objections into either of those buckets because that wasn't the point.

    This (from an earlier paragraph) was the point:
    | I do think we should review major changes to ensure that they don't
    | create serious new problems, and we have also failed on that score in
    | the past. That's part of why I invested a lot of effort in trying to
    | help check that in this case. And you may disagree with my evaluation
    | there. But what I would ask is to separate that from the question of
    | what we ideally should do, separate it from how you would like to see
    | the work done, and be very precise and clear about whether there is an
    | actual, serious problem. Not just "less than ideal" or "not any better
    | than what we already have" or "we could solve so many more problems with
    | a more radical design."

    In other words, I am arguing for a standard of review for delegate
    decisions.

    If the FTP team truly believes that tag2upload would create serious new problems or is actively dangerous, then I agree that they are applying the correct standard of review. I happen to disagree with that decision and I think I have a lot of evidence to support my disagreement. If the
    tag2upload developers choose to appeal that decision to the project as a whole, I know which way I'm voting. But that is the correct standard of review and hopefully we could have a GR on the merits.

    If their standard of review is something else, then I am asking them to please reconsider. Rejecting work that other people care deeply about has
    a very high cost for Debian and should require correspondingly serious justification.

    P.S. FWIW, the emotional reaction I infer you had when you read my last message on this topic is pretty close to the one I had when I read the message I was replying to.

    I have lots of emotional reactions to messages on threads like this. My emotional reaction is just a fact about me. It doesn't necessarily imply anything about the message that provokes it. It's on me to try to figure
    out where that emotion is coming from, how to deal with it in a
    constructive way, and whether it is justified or driven by some other personal reaction.

    In this particular case, I believed, and still believe, that you were implying something that I think is clearly false, and in so doing you belittled a lot of really difficult work that I and others have been doing
    in a way that I found insulting. I considered that reaction, probably not
    as long as I should have, and I decided you crossed a boundary that I
    wanted to enforce. I declined to edit the emotion out of my message the
    way that I usually try to do because there are times when that emotional reaction is justified and I think this is one of them. This is one of the cases where I think the constructive approach is to make it clear that
    this was an unacceptable way to have a conversation.

    Since the implication was made in public and, were it true, is material to
    an eventual GR, it felt correct to respond in public to rebut it.

    This may have been the wrong choice. This discussion has been a bit of a marathon and I certainly don't have the emotional reserves that I had at
    the start of it.

    Fair enough. No belittling was intended on my part. I'm probably still too hung up on the way this whole conversation started. From my point of view it was a call for a GR after 5 years of not talking about it with the relevant team. That just seems fundamentally wrong for solving problems in Debian.

    We're probably past the point of diminishing returns on this. I think your work on this topic has been exemplary.

    Scott K
    -----BEGIN PGP SIGNATURE-----

    iQIzBAABCgAdFiEE53Kb/76FQA/u7iOxeNfe+5rVmvEFAmZ4bE8ACgkQeNfe+5rV mvFtPQ/+MzJk73HcCcLhuP8mHP/IpjudNms0AwfYZy6v+k5BuAlGYswTEyjIGGW3 TavVuGirsH5FItlO9uPPwTUt5XkVMWCAfnOZz8Je1gQuT7oN9jyUgL5IiXj4fgoI DeHRm3AD+MrE+CfXEpaMuRaHOsT8pNwFO6mNTuOCfnTM+GPk21bX8LOHMj7lDJPh Gl2c1hhUwVniabUsibXcDLHOai9hAxoTjyrhE06WoeG5jOrEZSiHm6UkGtPHEpJZ vgPt4/bpDd+/NJNAz0JhmfWqBR4JqgpLR/o1H6Iq2GOjyTQ6um5vpkjQjEFT2Qrh z9N20ZjpxY5pua+N6U7MDLa6Hglu+I/wbSrPlfnlH0I9UBo2xYVH+L52/IS4iI+B 34reno8m/MlUgS38mTezskqD1vQmDocEDWsgC2MsvUo4vMHLnBcVxdX6hPwzc6p5 EXXtrrG39fuBNFCGpUCs1zsEvBa8QH4d1Fndn27FV12F5iIv3kvglAwhySypE17i PNlp8mL5AP9pVlbY3JSRB1F2omlDUGwqui820GbSfUm3hNhbUKBb61fRN4/i2HJ/ xXiAmJUGUM5RTXQ2PW70R3KeKAGfLr71BWIyU09ZyAOYhf+N2Z6QBUmYL2EEcsv8 +Ho+Ssk1VGjAmgHJk4TwigtIEQtL4MfcH+0+4sOWCM+IcDFwvQg=
    =t8lq
    -----END PGP SIGNATURE-----

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Micha Lenk@21:1/5 to All on Sun Jun 23 21:20:01 2024
    Hi Ian,

    Am 23.06.24 um 20:32 schrieb Ian Jackson:
    Micha Lenk writes ("Re: Summary of the current state of the tag2upload discussion"):
    In general our traditional approach of handling source packages is,
    we upload upstream's source achive plus our modifications (patches)
    and instructions how to build it (the packaging). Our tooling
    (basically dpkg-source) reference all these from a Debian source
    control file, the .dsc file.

    This is the "Debian source packages in 1993" slide from my 2023 talk.
    This was true, once. Nowadays, for most packages, this is a pretence.

    Most people maintain their packages in git. Many upstreams regard git
    as canonical, and publish tarballs not at all, or only as a
    concession. The proportion of software for which this is true is
    steadily rising. Many teams (including of serious, important and longstanding packages) work only in git. The Debian Xen team take
    upstream signed git tags as their input and work entirely in git.

    Yet our tooling and official workflows don't work that way. And when describing the current state, I definitely didn't and do not intend to
    say that it should stay like that. I hope that was clear from later
    parts of my mail anyways.

    From what I understood so far, the overall promise tag2upload tries
    to make is to simplify package maintenance to an extent that we
    offload the separation of the patches and the packaging from the
    upstream source to Git.

    I don't think this is the right way to look at it.

    tag2upload formalises and standardises and streamlines the *existing* git-based workflows which are in use in Debian today.

    Okay, but couldn't the existing git-based workflows get formalized and standardized without changing the way how you upload to Debian? Why is
    it so important to tie the support for so many workflows to the method
    how the upload is done?

    In the tag2upload concept, the uploaded files referenced by the
    .dsc file and the .dsc file itself are implicitly considered a
    second class citizen of the Debian ecosystem

    The tag2upload system is part of a *parallel* git-based system for
    handling source code. The intent is that all source packages will be available *both* ways (and can be edited using *both* views).

    Yes, this I understood, and that property makes it definitely useful to
    most developers from the start. It must have been a lot of work to get
    this far.

    What I am trying to do is put git on the same footing as .dscs: you'll
    be able to use both, with the same level of fidelity and officialness.

    ... which deserves my full support. Thank you!

    Still the tag2upload proponents dismiss a suggestion to also take
    changing the source format or tooling into account as an unfeasible
    "boil-the-ocean approach" (see [8]).

    People have been thinking about changing source formats, or making
    other kinds of more radical changes, for many many years.

    Certainly since at least 2013, when Joey Hess and I and some others we
    came up with a plan to improve things that we thought would be
    workable and deployable, unlike the attempts (and suggestions) that
    had been made so far. We've come a long way already, and
    significantly improved some maintainers' workflows.

    It is possible that I don't have all the needed background here. Would
    you mind to share a few pointers that outline how these plans worked
    out? I am genuinely interested in anything that could explain to me why
    any previous attempts of making Git a first class citizen in the Debian ecosystem didn't succeed so far. This could help me to get a better understanding of your long way, and maybe shed some light on why you're insisting so starkly on some of the tag2upload design decisions.

    Cheers,
    Micha

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Marco d'Itri@21:1/5 to [email protected] on Mon Jun 24 03:30:01 2024
    [email protected] wrote:

    I think we have seen and still see with usrmerge how difficult and cumbersome >the resolution of an initially as simple presented project turned out. I >understand the answer of Scott directed in that way, at least this is a >reservation of mine.
    For the record, usrmerge became difficult and cumbersome because
    non-technical reasons prevented implementing the simple solution in
    dpkg.

    --
    ciao,
    Marco

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Simon Richter@21:1/5 to Marco d'Itri on Mon Jun 24 10:20:01 2024
    Hi,

    On 6/24/24 10:19, Marco d'Itri wrote:

    I think we have seen and still see with usrmerge how difficult and cumbersome
    the resolution of an initially as simple presented project turned out. I
    understand the answer of Scott directed in that way, at least this is a
    reservation of mine.

    For the record, usrmerge became difficult and cumbersome because non-technical reasons prevented implementing the simple solution in
    dpkg.

    To correct the record, no such "simple solution in dpkg" ever existed.

    This keeps getting asserted, yet I cannot find any patch being proposed
    in the Debian BTS or on the debian-dpkg mailing list.

    Simon

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Ian Jackson@21:1/5 to Micha Lenk on Mon Jun 24 11:40:01 2024
    Micha Lenk writes ("Re: Summary of the current state of the tag2upload discussion"):
    Am 23.06.24 um 20:32 schrieb Ian Jackson:
    Most people maintain their packages in git. Many upstreams regard git
    as canonical, and publish tarballs not at all, or only as a
    concession. [...]

    Yet our tooling and official workflows don't work that way.

    That's precisely the problem.

    tag2upload formalises and standardises and streamlines the *existing* git-based workflows which are in use in Debian today.

    Okay, but couldn't the existing git-based workflows get formalized and standardized without changing the way how you upload to Debian? Why is
    it so important to tie the support for so many workflows to the method
    how the upload is done?

    Because of our users (and downstreams) !

    We're supposed to publish our source code. The point of Debian being
    Free Software isn't just so that *we* can share and modify the code.
    Our users must be able to do so too. They must be able to take the
    work that we have done, and modify it in turn, and share their
    modifications with others. This should be convenient and easy.

    For packages where upstream works in git, we should *definitely* be
    providing our users with git too. Otherwise we have inserted
    ourselves (and our ancient and crazy tooling) as a barrier between the
    user and the upstream.

    So we must publish the git history. Precisaely the source that's also available as a .dsc in the archive. Officially. In a standard place.
    In a standard form; ideally, a form similar to what a
    non-Debian-export would expect.

    Certainly since at least 2013, when Joey Hess and I and some others we
    came up with a plan to improve things that we thought would be
    workable and deployable, unlike the attempts (and suggestions) that
    had been made so far. We've come a long way already, and
    significantly improved some maintainers' workflows.

    It is possible that I don't have all the needed background here. Would
    you mind to share a few pointers that outline how these plans worked
    out? I am genuinely interested in anything that could explain to me why
    any previous attempts of making Git a first class citizen in the Debian ecosystem didn't succeed so far. This could help me to get a better understanding of your long way, and maybe shed some light on why you're insisting so starkly on some of the tag2upload design decisions.

    I'm afraid I don't have references to all those other ideas.

    If you have read these whole giant threads, you'll have seen various
    people proposing ideas which seem like they would be much simpler and
    have fewer moving parts. You'll also see responses pointnng out
    (variously) that these schemes tend to involve everyone having to
    change their git workflow, or even more radical changes the way
    everyone in Debian handles source code.

    The best I can do is probably just to say that almost all of those
    ideas have been suggested before. Most of them were around in 2013,
    or earlier. Many of these ideas are fairly obvious.

    Some of these ideas are quite good, if we could see how to get there
    from here, both socially and technologically. But Debian and its
    ecosystem is huge and diverse. That's one of Debian's big strengths;
    where we have imposed uniformity it has usually involved pain and
    suffering.

    Mostly these ideas just stayed as ideas; in some cases some parts were implemented. Eg, dpkg-source's "3.0 (git)" source package format,
    which is not supported in Debian.



    The parts of "do Debian work in git" that *have* been implemented and
    deployed are precisely the parts that can be deployed *without*
    everyone having to change.

    There has been an enormous amount of work by, for example: the author
    of git-buildpackage; the operators of first Alioth and now Salsa;
    the authors and maintainers of other Debian git tools such as git-dpm
    and git-debcherry; etc. (My own git-debrebase tool fits in this list.)

    That work, by so many people, has been a great success!

    The work of the typical Debian maintainer is nowadays much, much,
    easier than it was in 1993. Thanks to everyone who has contributed to
    this revolution!

    The problem remains, though, been that it's not official and
    systematised. The resulting chaos is a particular problem for our
    downstreams and users. [1] This situation is not the fault of any of
    the people involved. It's just a piece of work that hasn't been done
    yet.

    That task is what we're trying to achieve, with tag2upload.

    Like the parts of this picture that have come before, tag2upload is
    deployable because it doesn't involve forcing change on everyone. Not
    only does that make it technically and politically possible, but it is
    is a kind way to go about introducing such a change. That is very
    important to me.

    Ian.

    [1]

    For an picture of how bad the situation is, see this article by
    me, aimed at our users:

    https://diziet.dreamwidth.org/9556.html

    Get source to Debian packages only via dgit; "official" git links
    are beartraps

    --
    Ian Jackson <[email protected]> These opinions are my own.

    Pronouns: they/he. If I emailed you from @fyvzl.net or @evade.org.uk,
    that is a private address which bypasses my fierce spamfilter.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Matthias Urlichs@21:1/5 to All on Mon Jun 24 14:40:01 2024
    This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --------------Omb4r5kqFobIvH9ke9PmCZly
    Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64

    T24gMjMuMDYuMjQgMjE6MTMsIE1pY2hhIExlbmsgd3JvdGU6DQo+IE9rYXksIGJ1dCBjb3Vs ZG4ndCB0aGUgZXhpc3RpbmcgZ2l0LWJhc2VkIHdvcmtmbG93cyBnZXQgZm9ybWFsaXplZCBh bmQgDQo+IHN0YW5kYXJkaXplZCB3aXRob3V0IGNoYW5naW5nIHRoZSB3YXkgaG93IHlvdSB1 cGxvYWQgdG8gRGViaWFuPyANCg0KTm90ZSB0aGUgcGx1cmFsLCB3aGljaCBpcyBhIGxhcmdl IHBhcnQgb2YgdGhlIHByb2JsZW0uDQoNClllcyB0aGV5IGNhbiwgaW4gZmFjdCBtb3N0IG9m IHRoZW0gYWxyZWFkeSBhcmU7IHRoYXQncyB0aGUgImRnaXQgDQpwdXNoLXNvdXJjZSIgcGFy dC4NCg0KPiBXaHkgaXMgaXQgc28gaW1wb3J0YW50IHRvIHRpZSB0aGUgc3VwcG9ydCBmb3Ig c28gbWFueSB3b3JrZmxvd3MgdG8gdGhlIA0KPiBtZXRob2QgaG93IHRoZSB1cGxvYWQgaXMg ZG9uZT8gDQoNCiBGcm9tIG15IGFkbWl0dGVkbHkgbGltaXRlZCBQb1YgdGhlcmUgYXJlIHRo cmVlIGFuc3dlcnMgdG8gdGhpcy4NCg0KKiBTdXBwb3J0IGZvciB0aGVzZSB3b3JrZmxvd3Mg aXMgKm5vdCogdGllZCB0byB0aGUgdXBsb2FkIG1ldGhvZC4gDQp0YWcydXBsb2FkIG1lcmVs eSAoZmFtb3VzIGxhc3Qgd29yZCkgaW50ZW5kcyB0byBhZGQgYW4gYWx0ZXJuYXRlIHVwbG9h ZCANCm1ldGhvZCB0aGF0IGhhcHBlbnMgdG8gb2ZmbG9hZCA5OSUgb2YgdGhlIHdvcmsgdG8g YnVpbGQgdGhlIHNvdXJjZSANCnRhcmJhbGwocykgZnJvbSB0aGUgYnVpbGRlcidzIG1hY2hp bmUgdG8gdGhlIHQydSBzZXJ2aWNlLg0KDQoqIFVzaW5nIGEgcHVyZSBnaXQtYmFzZWQgdXBs b2FkIG1ldGhvZCBhbGxvd3MgdGhlIG1haW50YWluZXIgdG8gcHJlcGFyZSANCnRoZSB1cGxv YWQgd2l0aG91dCByZXF1aXJpbmcgRGViaWFuLXNwZWNpZmljIHRvb2xpbmcuIFByb2R1Y2lu ZyBhIG5ldyANCkRlYmlhbiByZWxlYXNlIGZyb20gYSBDSSB3b3JrZmxvdyBiZWNvbWVzIGEg bG90IGVhc2llciB3aGVuIHRoZSBDSSANCnN5c3RlbSBkb2Vzbid0IG5lZWQgdG8gaGF2ZSBh IGRnaXQgaW5zdGFsbGF0aW9uOyB0aGUgc2l0dWF0aW9uIGJlY29tZXMgDQp3b3JzZSB3aGVu IHRoZSBnaXQgd29ya2Zsb3cgeW91IHdhbnQgdG8gdXNlIGlzIG5vdCB5ZXQgc3VwcG9ydGVk IGJ5IHRoZSANCmRnaXQgaW4gRGViaWFuIFN0YWJsZS4gSW4gZmFjdCwgeW91ciBDSSBjb3Vs ZCBydW4gb24gdG9wIG9mIEZlZG9yYS4gT3IgDQpldmVuIE1hY09TLg0KDQoqICInZ2l0IHB1 c2gnIHRvIGJ1aWxkIiBvcGVucyB0aGUgZG9vciB0byBmdXJ0aGVyIHN0cmVhbWxpbmluZyBv ZiB0aGUgDQp3YXkgb3VyIGFyY2hpdmUgd29ya3MuIFdoeSBzaG91bGQgd2UgYnVpbGQgZnJv bSBzb3VyY2UgdGFyYmFsbHMgd2hlbiB0aGUgDQp2ZXJ5ICJnaXQgcHVsbCIgY29tbWFuZCB0 aGF0J3MgcmVxdWlyZWQgZm9yIGFzc2VtYmxpbmcgdGhlc2UgdGFyYmFsbHMgDQpjb3VsZCBz aW1wbHkgYmUgcmV1c2VkIGZvciB0aGUgImRlYnVpbGQgLWIiIHN0ZXA/IFdoeSBzaG91bGQg b3VyIA0KYnVpbGRlcnMgbmVlZCB0byB3YWl0IGZvciB0aGUgcGVyaW9kaWMgYXJjaGl2ZSB1 cGRhdGUgY3JvbmpvYj8gRG8gd2UgDQpldmVuIG5lZWQgdGhlIHNvdXJjZSB0YXJiYWxscyBp biB0aGUgZmlyc3QgcGxhY2UsIG9yIGlzIGEgDQpwb3NzaWJseS1yZWR1bmRhbnQgc2Vydmlj ZSBzdWZmaWNpZW50IGdpdmVuIHRoYXQncyB3aGF0IG91ciBiaW5hcnkgDQpidWlsZGVycyB1 c2UgYW55d2F5PyBTaG91bGQgd2UgZmVlZCB0cmFkaXRpb25hbCB1cGxvYWRzIGludG8gZGdp dCBpbiANCmFkZGl0aW9uIHRvLCBvciBldmVuIGluc3RlYWQgb2YsIHBvc3RpbmcgdGhlbSB0 byBvdXIgRlRQIHNlcnZlcnM/IGV0Yy4NCg0KLS0gDQotLSBtaXQgZnJldW5kbGljaGVuIEdy w7zDn2VuDQotLSANCi0tIE1hdHRoaWFzIFVybGljaHMNCg0K

    --------------Omb4r5kqFobIvH9ke9PmCZly--

    -----BEGIN PGP SIGNATURE-----

    wsF5BAABCAAjFiEEr9eXgvO67AILKKGfcs+OXiW0wpMFAmZ5Z0MFAwAAAAAACgkQcs+OXiW0wpPY CxAAiGmsN3ivG4L94ghN1oim0RQ1iuhh2ySkkJHeBnX1GxoTaOnN7VKWbaUT8MKrNPlNGoxNzQ+/ ehNLszrKqXzthVGh/C75DUVmRzI7RpvMqhpMa+ptEAgnqTBf8LSLNgvjpfZayIfvgvuxHBZ0V+pG xVdwONfWu5lO3asq+fxSzPLjhebqHTxE1QgtnUTJjO7ZIPAgcJQPFG/3zJbDiEgjItdunB4g0B2Q yoGm2F898vq0Ol7vXyayFUGQpWUXwr1e4o/JUsON7bMHg616pklIvXdTcwflP68ISby3ZOx7/Unu QCSmnu+yk9wpFPxU/4KlrAGAcUXQODvao9uNk5smW+PDqhhr9YvpMJHZaqQ1ji9KwcjESan/hwsA wQe53CD5EY98vPK1880jJUzpVGsZlZqjoO0obYYuEOAsXS3NdFxWQP9JHIzgO0264TlM3KRHaLzz DXt8CKIgKHizB7h9mIQUZi2XsgUrkGJH6QMv8pB3tHT1cho7bqmZPfQG3FoRSi8JGaBb1G70yshP ShhseyKdF0SuCZGjr1nwdy3mujEV4zm2OuBRgczsi+/MLDQM9caf+nXIflwTbGc2m1aoO63J/DIB wvVz2NJqZoeHSwVz+H3nMOU3ilOalYCRoS7HJVrNlgDkX/RHDyECSJYdGTZDH05EojryjAAZeNpS b9w=
    =Ue99
    -----END PGP SIGNATURE-----

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Scott Kitterman@21:1/5 to Aigars Mahinovs on Mon Jun 24 17:40:01 2024
    On June 24, 2024 2:48:49 PM UTC, Aigars Mahinovs <[email protected]> wrote: >On Sun, Jun 23, 2024, 19:17 Scott Kitterman <[email protected]> wrote:

    As an example, I think the fact that I can download any source package in
    the
    archive and cryptographically verify who uploaded it and that it's
    unmodified
    from what was uploaded is an important property of our current archive
    structure. IIRC, you've claimed it's not. I don't think either of us has >> a
    very good understanding of why the other believes that. I think for both
    of
    us it's just too obviously true/not true to be easy to explain.


    There are a few problems with that.

    1. The source package is not the end state and not what the end user ends
    up using in their system. Users use a binary deb that is .. generated by >build and signed automatically by build key. You have to trust the build in >the source to deb translation. Nowadays most builds are reproducible, but
    not all and they were not when buildd keys were introduced. The
    git-to-source conversion is a much simpler process than a build. I have not >seen any good arguments against applying the same logic here.

    2. What is signed is not the same as what the developer has been writing or >reading. You are putting a lot of weight on this signature of intermediate, >generated artifacts. Developers basically never verify that contents of the >tarballs and diffs they are signing actually match the contents of their
    work folder. It would be trivial the create a modified tool in the >dpkg-source chain that would inject malicious software just into the source >package files just before they are signed, especially if targeting a >particular developer.

    The tag in git is closest to what the developer inspected and actually can >sign with confidence. All the downstream from that is a generated artifact >that may be tampered with and is much harder to manually verify. From this >perspective relying on debian source package signatures is less secure than >the proposal with git2upload, but that is what we have historically agreed
    to accept.

    There is a bunch of steps between developer uploading the source package to >the archive and all the way to the end user downloading and installing the >final package into their system. And we (as Debian) have been diligently >working towards automating and centrally managing as many of them as >feasible. All this does is (for some packages) moving the automation state >one more step closer to the actual source code. Just because this step used >to be the first does not make it so special as not to be extendable in the >same way.

    And then we can work or reproducible source builds and running two
    conversion servers and comparing results and other security improvements >(which is a higher bar than what we demand for binary packages that actual >end users are running).

    None of that changes the fact that it's what they signed. Historically, the project has found that useful and I think it still is.

    Scott K

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Matthias Urlichs@21:1/5 to All on Mon Jun 24 19:10:01 2024
    This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --------------5FKoKS15DLyioDcTvYic0ySX
    Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64

    T24gMjQuMDYuMjQgMTc6MzMsIFNjb3R0IEtpdHRlcm1hbiB3cm90ZToNCj4gTm9uZSBvZiB0 aGF0IGNoYW5nZXMgdGhlIGZhY3QgdGhhdCBpdCdzIHdoYXQgdGhleSBzaWduZWQuDQpXZWxs LCB0aGF0IHNob3VsZG4ndCBwcmV2ZW50IHVzIGZyb20gYWxsb3dpbmcgdGhlbSB0byBzaWdu IHNvbWV0aGluZyANCmVsc2UgaW5zdGVhZC4gTGlrZSwgYSBnaXQgdGFnLg0KPiAgICBIaXN0 b3JpY2FsbHksIHRoZSBwcm9qZWN0IGhhcyBmb3VuZCB0aGF0IHVzZWZ1bA0KUGFydCBvZiB0 aGUgcmVhc29uIGZvciB0aGlzIHVzZWZ1bG5lc3MgaXMgdGhhdCBnaXQgZGlkbid0IGV4aXN0 IGluIDE5OTMuIA0KWW91IG5lZWQgdG8gc2lnbiAqc29tZXRoaW5nKiBpZiB3ZSB3YW50IGFu IHVuZm9yZ2VhYmxlIHJlY29yZCBvZiB3aG8gDQp1cGxvYWRlZCB3aGF0Lg0KPiBhbmQgSSB0 aGluayBpdCBzdGlsbCBpcy4NCg0KU2lnbmVkIGdpdCB0YWdzIGFyZSBldmVuIG1vcmUgdXNl ZnVsIElNSE8uDQoNClRoaXMgaXMgdGhlIHNvdXJjZSAodXBzdHJlYW0gLyBwYXRjaGVzIC8g bWVyZ2VzIC8g4oCmKSwgdGhpcyBpcyB3aGF0IEkgDQpjaGFuZ2VkLCB0aGlzIGlzIHdoYXQg SSBzaWduZWQuIEFsbCBjYXVzYWxseSBsaW5rZWQgYW5kLCBhYnNlbnQgYSANCmhlYXZpbHkt bW9kaWZpZWQgZ2l0IGV4ZWN1dGFibGUsIGRpcmVjdGx5IHZlcmlmeWFibGUgYW5kIHJldXNh YmxlIGZvciANCmZ1cnRoZXIgd29yay4NCg0KWW91IGRvbid0IGdldCB0aGF0IHdpdGggYSBz aWduZWQgLmRzYyBmaWxlLiBUaGF0IGZpbGUgbWVyZWx5IHNheXMgIkkgaGFkIA0Kc29tZSBz b3VyY2Ugb24gbXkgc3lzdGVtLCByYW4gJ2RlYnVpbGQgLVMnLCBhbmQgc2lnbmVkIHRoZSBy ZXN1bHQiLg0KDQotLSANCi0tIHJlZ2FyZHMNCi0tIA0KLS0gTWF0dGhpYXMgVXJsaWNocw0K
    DQo=

    --------------5FKoKS15DLyioDcTvYic0ySX--

    -----BEGIN PGP SIGNATURE-----

    wsF5BAABCAAjFiEEr9eXgvO67AILKKGfcs+OXiW0wpMFAmZ5oFwFAwAAAAAACgkQcs+OXiW0wpPl fw/8DyKxZQUmo1yS3TrkSK1QlnNoNb18BBZWXlWbCiLrQbTozxLhaNOmdLhP4Im7N4RI2nlQeKt2 jFgU55WNVLzzNBb7tG+o3yN4tB/ZG4rPW8OkNxccXzC4I28wrz6wwWTeIHonuj7BXf3V0s6FFoRr sduCYMEVOGJBgk/aR/GE2zn3fzKJwO1iyyYeH0XgMMn6Ku0ibHrrW+iO6x/jKwGopBWP1Re0PVYJ QNJQthbnuef1qts5z5qk+I8cJnGVGN4IzOiC5OvOp5yxaJnNXfFQ4J2PVIItZG61N5BIBoAuglaM Ri1CspX1UwpYsy4UQM92EHlaaiIOfdB0f80YtJ6a6kujgVZz5qlVhTydjttkk1tFE3mlxfB4WTAA 6IovkLz0Jx/oJrnDn389z2hCcF+Yjwo5Z2Ka/bhEAHRhzlr13IGIu2/v57Y+6WIsBjys5HtvreWV piNhTl7aVWCUbrUKb116JP+ujuLJf1jlbgKe/2m/IQUS0xnVYUY+9r4XWHX/Unxzd0i1keQk0zmk /kSiHpEY6wJagpACX/yslKJq2pVGA64ASMrP0ysxGoCzOd3FXZRyu5wyWyMsBRZhPe7Beawe4eL+ 8UnwqTlfr1g0QL70vRtW76vRiAsg5zhgyKG07QA4IKRXbWL+cvi6eZ/uIXhND3jwb1Vy6kHQUISX P3Q=
    =9aBz
    -----END PGP SIGNATURE-----

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Russ Allbery@21:1/5 to Aigars Mahinovs on Mon Jun 24 18:20:01 2024
    Aigars Mahinovs <[email protected]> writes:
    On Sun, Jun 23, 2024, 19:17 Scott Kitterman <[email protected]> wrote:

    As an example, I think the fact that I can download any source package
    in the archive and cryptographically verify who uploaded it and that
    it's unmodified from what was uploaded is an important property of our
    current archive structure. IIRC, you've claimed it's not. I don't
    think either of us has a very good understanding of why the other
    believes that. I think for both of us it's just too obviously true/not
    true to be easy to explain.

    There are a few problems with that.

    [snip a lot of things that I agree with]

    I worked on an update of my security review last night to take into
    account the additional concerns that people have raised and other
    feedback. I wrote a whole bunch of words about this specifically because I don't think it's too obvious to explain at all, and my opinion is more
    nuanced than simply saying this archive property isn't important. From a security standpoint, I care about attacks and defenses, and care about
    abstract properties to the extent that they are useful in preventing
    attacks. Here's what I came up with (this hasn't been published yet; it's
    still a draft).

    #### Misattribution of the source package

    Determining who uploaded a source package given only the signed source
    package becomes slightly more complex in the tag2upload design. If the
    package is not signed by the tag2upload key, the signer is the uploader,
    as with the current system. If it is signed by the tag2upload key, the
    uploader can be extracted from additional fields in the `*.dsc` file. That uploader information is trustworthy provided that the tag2upload key has
    not been compromised and the tag2upload service was not compromised at the
    time this source package was constructed.

    In both the current and the tag2upload case, a compromise of the source
    package build allows upload of malicious code, but compromise of the
    tag2upload service additionally allows superficial misattribution of that upload to any uploader the attacker chooses.

    It's not clear that this is useful for the attacker. If anyone checks the signed Git tag referenced by the source package metadata and discovers it either doesn't exist or is signed by someone other than the source package claims, they will immediately detect the compromise of the tag2upload
    service, which is generally not to the attacker's advantage. In most
    cases, injecting malicious code into the source package without modifying
    the attribution is a safer attack strategy. However, this misattribution
    could be used to try to hide from casual inspection packages synthesized entirely on the tag2upload server that never had a corresponding signed
    Git tag.

    If the archive processing software were modified to extract the attributed uploader from the source package metadata and email upload notifications
    to them as well as the maintainer, this would make detection of
    misattributed source packages much more likely.

    If the archive processing software were modified to accept an additional
    file in tag2upload uploads containing the signed Git tag, it could check
    that the tag2upload attribution matches the signed tag. This effectively prevents this attack except in the case where the archive processing
    software is also compromised, which is discussed in the next section.

    ### Archive processing

    Someone with administrative access to the archive processing machinery, including the archive signing key, could inject a malicious source or
    binary package into the archive. This is not prevented by either the
    current upload architecture or by tag2upload.

    This attack on source packages can be detected by verifying the signatures
    on all of the source packages in the archive. This remains true after the introduction of tag2upload; some of those source packages will be signed
    by the tag2upload key instead of a maintainer key, but neither of those
    keys are available to the archive processing machinery and are therefore equivalent when detecting this specific attack.

    Compromise of both archive processing and the tag2upload service or key
    would allow injection of source packages signed with the tag2upload key
    that could not be detected by this method or by reproducible binary
    builds. Verifying the Git tag references in source packages uploaded by tag2upload against the corresponding Git tags archived on the dgit-repos
    server would detect this combined attack. This attack therefore remains
    easier to detect than injecting malicious code into binary packages, which
    only requires compromising archive processing and which can only be systematically detected by reproducible binary builds.

    The best detection strategy against a combined compromise of archive
    processing and the tag2upload service, and many other attacks on source packages in both the current and tag2upload cases, is to create an
    independent service that reproduces the source package construction done
    by tag2upload from the original signed Git tag and compares the results to
    the source package as published in the archive.

    ### Source package signatures

    Currently, the source packages present in the archive include OpenPGP signatures on the `*.dsc` file from the original uploader. For packages uploaded by tag2upload, the `*.dsc` file will instead be signed by the tag2upload service key, and the original uploader, their key fingerprint,
    and a reference to the original signed Git tag will be added as additional Debian source package control fields in the `*.dsc` file. Understanding
    the security implications of this change requires some analysis.

    The source package signature can be used for three purposes:

    1. Detect modifications to the source package after it was uploaded.
    2. Determine who uploaded this source package.
    3. Verify that the source package repesents the intent of the uploader.

    For the first purpose, the primary protection against archive
    modifications is the sources list file, signed by the archive key, which contains hashes of all of the source package files. This case is therefore
    only interesting if the archive processing software or database has been compromised, if the source package is retrieved from the archive without checking its hashes against the sources list, or if the source package is
    being checked outside of the context of the archive.

    The implications of a compromise of the archive processing software are discussed above.

    Verification that the package has not been modified, when outside of the context of the archive, depends on the security of the tag2upload service
    and its key. This is true of any signed source package outside of the
    context of the archive: verification that it has not been modified depends entirely on the security of the key that has signed it. However, the
    tag2upload service and key can be abused to generate far more source
    packages without arousing suspicion than the typical uploader key, since
    the tag2upload key is expected to sign a variety of source packages.

    The second purpose is discussed above in the context of compromises of the tag2upload server.

    For the third purpose, I believe only weak intent information can be
    derived from the uploader signature today. It is common practice in Debian
    to verify the Git tree that one wants to upload, run a package build step,
    and then blindly sign the resulting source package. The uploader signature therefore does not say that the uploader verified the correctness of the
    source package, only that they triggered a build process and trusted its results. This is equivalent in the tag2upload case except that the
    uploader signature happens before the build process (on the Git tag)
    rather than after the build process (on the source package). In both
    cases, the uploader does not subsequently verify the content of the source package; in both cases, if the system on which the source package is built
    is compromised, the source package may be compromised and the uploader signature step will not detect this compromise.

    Therefore, for this purpose, the current uploader signature appears to
    provide stronger evidence of intent than it truly does. The signature on
    the original Git tag triggering the upload provides equal evidence of
    uploader intent.

    There is one remaining difference: in the current upload case, the OpenPGP signature of the uploader is published in the archive. In the tag2upload
    design as reviewed, the uploader's OpenPGP signature (in the form of the
    signed Git tag) is published to the dgit-repos server but not in the
    archive. This could be changed if desired by, for example, tag2upload
    providing and the archive processing software accepting and publishing an additional file accompanying the source package containing the original
    signed Git tag.

    In conclusion, the source package signatures present in the archive cannot
    be used to detect manipulation of source packages following a compromise
    of the tag2upload server in two specific cases:

    - Detection of tampering with the source package outside of the context of
    the archive, or without checking the archive sources list.

    - Detection of a package created on the tag2upload server without an
    accompanying signed Git tag, if the verification software does not
    retrieve and verify the signed Git tag referenced by the source package
    metadata.

    The second problem can be fixed with the archive processing software modification discussed under "Misattribution of the source package."

    A tool that, given a tag2upload-signed source package, retrieved the corresponding Git tag, verified the signature, and compared its metadata
    to the source package metadata would also fix the second problem if it
    were used whenever verifying source packages outside of the archive. If
    that tool additionally reconstructed the source package based on that tag
    and compared its contents to the source package published in the archive,
    it would provide a stronger guarantee for all three purposes than either
    the current upload mechanism or the current tag2upload design provides.

    It is worth noting for comparison purposes that a compromise of a binary
    buildd is even harder to detect, since it leaves no trace in the archive
    at all apart from the malicious binary package.

    --
    Russ Allbery ([email protected]) <https://www.eyrie.org/~eagle/>

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Scott Kitterman@21:1/5 to Aigars Mahinovs on Mon Jun 24 21:10:01 2024
    Do you have any examples of problems that this would have avoided (xz-utils isn't one - due to the way it's releases are done, it wouldn't be suitable for tag2upload)?

    Scott K

    On June 24, 2024 6:36:59 PM UTC, Aigars Mahinovs <[email protected]> wrote: >Signing something that you did not write and something that you don't read
    is a bad security practice that exposes you to various attacks.

    Just because we have been doing this poor security practice for a long time >does not make it better. Now better methods are possible and we shouldn't >prevent them from being used just because we are used to the weaker
    approach.

    On Mon, 24 Jun 2024, 18:34 Scott Kitterman, <[email protected]> wrote:


    None of that changes the fact that it's what they signed. Historically,
    the project has found that useful and I think it still is.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Scott Kitterman@21:1/5 to Aigars Mahinovs on Mon Jun 24 22:10:01 2024
    I understand the theory. Are we aware of it happening?

    Scott K

    On June 24, 2024 7:42:25 PM UTC, Aigars Mahinovs <[email protected]> wrote: >It's pretty simple. Compromise the computer of one developer, the one they >use for development. Have your code be in one of the tools being called >during Debian source package build (you don't even need root, just writable >element in PATH). Now you can inject a malicious payload directly into the >tarball or debian diff of the target Debian source package. The developer >will never see it in their code. It will arrive in the archive signed by
    the victim as part of normal delivery. There will be nothing suspicious
    about it unless someone else does a NMU and sees a bigger than expected >debdiff.

    Even if the developer is very security minded and maintains a separate >air-gapped signing laptop, that doesn't help unless you first actually >analyse the actual artifact that you are signing.

    Maybe it would even possible to trick the developer into to signing an
    upload of a different package (add a binary package with high version to >their source package?).

    With tag2upload there is no obscured source package file to be signed, so
    all content going into the archive must already be visible in the git repo >being signed and will also be visible in the dgit repo. Any difference to
    the upstream will be quite obvious in either case.

    That is the difference between signing something that no human will ever be >reading and singing the actual source that everyone will be looking at. And >that is the difference between needing to secure just one service >(tag2upload) instead of securing a thousand work PCs of all DDs. And we do >this already for build machines. If one would want to sneak stuff into >Debian, hacking a buildd would be the best target - you are putting hacked >binaries into end user machines without leaving traces in source packages
    or repos.

    An attack on upstream where a release tarball is different form upstream
    git tree would also be side-stepped by the Debian maintainer simply using >only the git tree as upstream and completely ignoring the tarballs. It
    would not provide a solution for code hidden in the upstream git itself
    that the maintainer missed.

    On Mon, 24 Jun 2024, 22:03 Scott Kitterman, <[email protected]> wrote:

    Do you have any examples of problems that this would have avoided
    (xz-utils isn't one - due to the way it's releases are done, it wouldn't be >> suitable for tag2upload)?

    Scott K

    On June 24, 2024 6:36:59 PM UTC, Aigars Mahinovs <[email protected]>
    wrote:
    Signing something that you did not write and something that you don't read >> >is a bad security practice that exposes you to various attacks.

    Just because we have been doing this poor security practice for a long
    time
    does not make it better. Now better methods are possible and we shouldn't >> >prevent them from being used just because we are used to the weaker
    approach.

    On Mon, 24 Jun 2024, 18:34 Scott Kitterman, <[email protected]> wrote: >> >

    None of that changes the fact that it's what they signed. Historically, >> >> the project has found that useful and I think it still is.



    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Russ Allbery@21:1/5 to [email protected] on Tue Jun 25 02:20:01 2024
    HW42 <[email protected]> writes:
    Russ Allbery:

    For the third purpose, I believe only weak intent information can be
    derived from the uploader signature today. It is common practice in
    Debian to verify the Git tree that one wants to upload, run a package
    build step, and then blindly sign the resulting source package. The
    uploader signature therefore does not say that the uploader verified
    the correctness of the source package, only that they triggered a build
    process and trusted its results.

    Assuming they run this on the same system, I don't think that for
    integrity protection the source package build process makes a meaningful difference.

    Yes, exactly. That is precisely my argument here. The information you
    can glean about intent is only that the signer wanted to upload something
    based on what they think is the contents of their working tree. Both the
    Git tag signature and the source package signature provide equivalent information for this purpose. Signing the source package itself doesn't,
    in practice, make the results of the source package build process any more reliable.

    It might be a bit easier for someone else to spot a suspect git change,
    but that's far from given.

    Agreed.

    Also based on the description in this thread at least for dgit workflows
    you can already generate and check that the uploaded source is
    tree-same.

    This is the hope, certainly. I don't know if anyone has written a tool
    that does this yet. I'm reluctant to claim that this is definitely true
    until someone has tested a tool. There are a lot of things that can go
    wrong with reproducible builds, and while I think all the problems can be overcome, some work may be required.

    Also the code in the source package is not just a hidden artifact that
    is temporarily used during the build. It's surfaced at various places,
    like sources.debian.org, apt-get source, dgit clone, .... So spotting an unusual change by accident is possible here too.

    I agree with this as well.

    This is equivalent in the tag2upload case except that the uploader
    signature happens before the build process (on the Git tag) rather than
    after the build process (on the source package). In both cases, the
    uploader does not subsequently verify the content of the source
    package; in both cases, if the system on which the source package is
    built is compromised, the source package may be compromised and the
    uploader signature step will not detect this compromise.

    But you are trusting the Developer system that signs the tag or source package anyway. If compromised it can simply sign malicious code in both cases.

    Yes, I agree.

    Therefore, for this purpose, the current uploader signature appears to
    provide stronger evidence of intent than it truly does. The signature
    on the original Git tag triggering the upload provides equal evidence
    of uploader intent.

    As described above I'm not convinced by that "intent" argument from a security point of view.

    I think you thought I was making a different argument than I'm making (and
    if I said something that made that confusing, I should fix it). I don't
    think the Git tag is more secure than the source package signature. I do
    think signing a Git tag makes detection easier, but a compromise of the uploader's system can still compromise either system.

    Injecting the malicious code into the signed Git tree is noisier because
    it creates a persistent artifact in more places in a form more likely to
    be noticed. That's the only thing I'm claiming is better compared to the source package signature. Otherwise, I think their security properties
    are roughly the same.

    What might be worth mentioning is that verifying the signature by the developer on a .dsc or a git tag, can be actually quite involved.
    Especially if you don't want to trust the Debian archive (which some
    seem to see as a feature of shipping the signed .dscs). You first need
    to find out when the signature was made without trusting the included timestamps (since they could be faked). Then check the state of the
    Debian keyring at that time. Then check if the key was revoked later.
    Then you can finally check the actually file signature.

    Yes. You have exactly the same problem if you want to check the signature
    on a source package today. There is no neat universal solution to
    verifying the uploader signature in either the current or the tag2upload design. It's pretty easy to get to a 90% solution and quite difficult to verify the remaining 10%.

    You really want to rely on the archive sources list here, because its
    semantics are much cleaner. The scenarios where you cannot rely on it, in
    both the current system and in the tag2upload case, get rather complex.

    I added this additional paragraph clarifying that a bit earlier today, but after I posted this draft.

    Verifying historical signatures on either a source package or a Git
    tag for a package already in the archive has an inherent limitation:
    it is not necessarily clear what keyring to use for that verification.
    If the uploader is still an active Debian project member, this may be
    straightforward. If they are not, this is complex, in identical ways,
    for both direct signatures on source packages and Git tag signatures.
    It is not possible to verify all uploader signatures in the archive
    without using historical keyrings that are not readily available.

    Given this I'm not sure if tag2upload would make it much harder (but yes
    you would need things not on the mirrors, although you already kind of
    need this for checking the timestamps).

    In the specific part of the review to which you're responding, I'm arguing equivalence, not superiority of tag2upload.

    --
    Russ Allbery ([email protected]) <https://www.eyrie.org/~eagle/>

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Brian May@21:1/5 to Russ Allbery on Tue Jun 25 03:00:01 2024
    Russ Allbery <[email protected]> writes:

    #### Misattribution of the source package

    For a real life problem that I imagine tag2upload will solve:

    It is reasonable common that git is the "authoritative source of truth"
    for the current state of the project.

    But like it or not mistakes can happen. e.g. somebody applies a security
    update to the project. And uploads it to Debian. But forgets to do a git
    push to salsa.

    Then later on - maybe months. Or years. The packages I deal with don't
    change frequently. Somebody else makes changes to the git based on the
    salsa repo. And they push the changes to salsa. And they upload a new
    version to Debian. But surprise surprise, that version conflicts with
    the version already in the repo, due to the conflicting Debian version
    number.

    If the person is observant they will realize that this is a sign that
    the git repo is missing a version that is in the Debian
    upload. i.e. They are missing the security fix. The debian/changelog
    should make this obvious. And that the git repo is missing the version
    that has already been uploaded to Debian, and fixing this is now going
    to be messy. Because the git repo now contains conflicting changes for
    the same version. Maybe the solution here is to forget about trying add
    the current Debian version to git, and just worry about including all
    the required changes for the next release.

    On the other hand, if they are rushing too much, they may decide just to increment the version number. And suddenly that important security fix
    has just been dropped.

    Or maybe due to legacy reasons, the version somehow did get incremented
    without anyone noticing, no conflict occured on the upload, and the
    security fix siliently got lost.

    But: If there was a requirement that the git repo be pushed in order to
    do the upload to Debian, none of this would have happened. As I imagine
    would be the case if you used tag2upload.

    Yes, I have had this scenario happen a number of times now. It is
    horrible when it does happen.
    --
    Brian May @ Debian

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Simon Richter@21:1/5 to Brian May on Tue Jun 25 06:30:01 2024
    Hi,

    On 6/25/24 09:38, Brian May wrote:

    But like it or not mistakes can happen. e.g. somebody applies a security update to the project. And uploads it to Debian. But forgets to do a git
    push to salsa.

    You can only call it "forgetting" to do a git push if you introduce a
    policy that contributions to git-maintained packages have to be made
    through git.

    Which is a completely sensible policy, but it needs to be introduced as
    a policy (and communicated to the Security Team, and added to the
    Developer Manual), not as a necessary consequence of a technical change
    as so many policy changes in the past years.

    Then later on - maybe months. Or years. The packages I deal with don't
    change frequently. Somebody else makes changes to the git based on the
    salsa repo.

    As long as the policy is that the authoritative version of a package is
    in the archive, there needs to be an automated process to import
    uploaded packages back into git.

    Also, the salsa repo is not the authoritative version either. The dgit
    repo is.

    Simon

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Matthias Urlichs@21:1/5 to All on Tue Jun 25 08:10:02 2024
    This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --------------mSOvANkXprgoDKvb9VaBSpM2
    Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64

    T24gMjUuMDYuMjQgMDE6MjYsIEhXNDIgd3JvdGU6DQo+IEJ1dCB5b3UgYXJlIHRydXN0aW5n IHRoZSBEZXZlbG9wZXIgc3lzdGVtIHRoYXQgc2lnbnMgdGhlIHRhZyBvciBzb3VyY2UNCj4g cGFja2FnZSBhbnl3YXkuIElmIGNvbXByb21pc2VkIGl0IGNhbiBzaW1wbHkgc2lnbiBtYWxp Y2lvdXMgY29kZSBpbiBib3RoDQo+IGNhc2VzLg0KDQpJdCdzIG5vdCB0aGF0IGVhc3kuDQoN CkhpZGluZyBjb21wcm9taXNlZCBjb2RlIGluIG91ciB0YXJiYWxscyBpcyBlYXN5LiBOb2Jv ZHkgd2lsbCBldmVyIGxvb2sgDQphdCB0aGVtIChvcmRpbmFyaWx5KSBhbmQgeW91IG9ubHkg bmVlZCBhIHNpbmdsZSBzaGVsbCBzY3JpcHQgcnVubmluZyBhcyANCnRoZSBkZXZlbG9wZXIg aW4gcXVlc3Rpb247IGdpdmVuIGlub3RpZnkgaXQgZG9lc24ndCBldmVuIHNob3cgdXAgaW4g DQoidG9wIiB3aGlsZSBpdCB3YWl0cyBmb3IgYW4gb3Bwb3J0dW5pdHkgdG8gc3RyaWtlLg0K DQpIaWRpbmcgY29tcHJvbWlzZWQgY29kZSBpbiBnaXQgaXMgZGlmZmljdWx0LCBnaXZlbiB0 aGF0IGFjdHVhbCBwZW9wbGUgDQpyb3V0aW5lbHkgbG9vayBhdCBjb21taXQgaGlzdG9yaWVz IGFuZCBkaWZmc3RhdHMgYW5kIGRpZmZzLCBlc3AuIHJpZ2h0IA0KYmV0d2VlbiAiSSBjcmVh dGUgdGhlIHNpZ25lZCB0YWciIGFuZCAiSSBwdXNoIHRoZSB0MnUgdGFnIHRvIFNhbHNhIiAo d2UgDQpjb3VsZCBldmVuIHRlbGwgdGhlIHB1c2ggc2NyaXB0IHRvIHNob3cgdGhlIGdpdCBs b2cgYnkgZGVmYXVsdCBiZWZvcmUgDQpkb2luZyBzbykuDQoNCklmIHlvdSB3YW50IHRvIGhp ZGUgW3BhcnQgb2ZdIGEgY29tbWl0IGZyb20gdGhlIGRldmVsb3BlciB5b3UnZCBuZWVkIHRv IA0KcmVwbGFjZSB0aGUgYWN0dWFsIGdpdCBleGVjdXRhYmxlIHdpdGggYSBjb3B5IHRoYXQn cyBiZWVuIGNvbXByb21pc2VkIGluIA0KdmFyaW91cyBpbnRlcmVzdGluZyBhbmQgbm9udHJp dmlhbCB3YXlzLg0KDQotLSANCi0tIG1pdCBmcmV1bmRsaWNoZW4gR3LDvMOfZW4NCi0tIA0K LS0gTWF0dGhpYXMgVXJsaWNocw0KDQo=

    --------------mSOvANkXprgoDKvb9VaBSpM2--

    -----BEGIN PGP SIGNATURE-----

    wsF5BAABCAAjFiEEr9eXgvO67AILKKGfcs+OXiW0wpMFAmZ6WLMFAwAAAAAACgkQcs+OXiW0wpOA 7Q/6AjecT9cSuqpDk1EFSzzZcb/6Qj6JfMifIWltFKxHfXnSDDr7+jszuWtN39TTuC/x24o/NPO6 KwZ7lc0MuZ8vMhTlXhpAmxE8Ca7vwk50lXex8Q1kTkhZ3VOtT5SSmYd6TPXGjdKEJjZKTBrox0kv F+7f6j2vcXyAB3PTRWHoGXB7KWQItI4gU5oPbkR/PT2lbfIztAGuM5eYDju+jedzFhhTHjTMgkfp vLGlUDcgOSnfkwvmJjC5xT0R2RaWQxLi62d8URITwJ3JKKxF2LVsU9op89NeLBAQhBJvnGr+/hjd OJvgH5D8zEsmwgl8f6vM8dBjNy9OGA5lDPKsxEZ2QYKEnnW19eEBjqo3Cyhy15pJi/1kiH3VvHln QvE9vtYTO8rZj31pl8OtdcJMmjwZxhxrHdqpvuAuuzumH1iITa0J1AUrg6Dhz7jFStOdmNlcnOyA 9ZGfZZx0peJ12i648cdQUFwLYit4RP1/mvuEwTd++vGR5UuXQ9XRhxz1GcAO7Ejw/bWrGHMRWH8/ oIQqPnPr52Vr9i5t+NHqPbpvaUqzE98tJqlXDMi1z0d1XG7H5xKxmkWOqKdoWqz75+VjnWtwxT5I sk52acAe2FBbr6NJLpv10BaH5RvuNkHngP0Bgplbmd42fwcSSzWMjEHgRvPjE58MgML+nk/9LhOK pfE=
    =iJvX
    -----END PGP SIGNATURE-----

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Matthias Urlichs@21:1/5 to All on Tue Jun 25 09:10:02 2024
    This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --------------LrGYetrCEH0NtSSgVWZid1f4
    Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64

    T24gMjQuMDYuMjQgMTg6MTIsIFJ1c3MgQWxsYmVyeSB3cm90ZToNCj4gSXQgaXMgd29ydGgg bm90aW5nIGZvciBjb21wYXJpc29uIHB1cnBvc2VzIHRoYXQgYSBjb21wcm9taXNlIG9mIGEg YmluYXJ5DQo+IGJ1aWxkZCBpcyBldmVuIGhhcmRlciB0byBkZXRlY3QsIHNpbmNlIGl0IGxl YXZlcyBubyB0cmFjZSBpbiB0aGUgYXJjaGl2ZQ0KPiBhdCBhbGwgYXBhcnQgZnJvbSB0aGUg bWFsaWNpb3VzIGJpbmFyeSBwYWNrYWdlLg0KDQpUaHVzLCByZXByb2R1Y2libGUgYnVpbGRz LCB3aGljaCB3ZSAoYW5kIG90aGVycykgaGF2ZSBiZWVuIHdvcmtpbmcgb24gDQpmb3IgeWVh cnMuIFN1cnByaXNlOiB3ZSBzdGlsbCBhcmVuJ3QgdGhlcmUgeWV0Lg0KDQpBIHJlcHJvZHVj aWJpbGl0eSBjaGVja2VyIGZvciB0MnUgc2VlbXMgbGlrZSBjaGlsZCdzIHBsYXksIGNvbXBh cmVkIHRvIA0KdGhhdCBlZmZvcnQuIFdoaWxlIG5vIHQydSBjaGVja2VyIGN1cnJlbnRseSBl eGlzdHMsIHNvbWVib2R5IG1pZ2h0IGJlIA0KbW90aXZhdGVkIGVub3VnaCB0byB3cml0ZSBv bmUuIChIaW50LCBoaW50IOKApikNCg0KLS0gDQotLSByZWdhcmRzDQotLSANCi0tIE1hdHRo aWFzIFVybGljaHMNCg0K

    --------------LrGYetrCEH0NtSSgVWZid1f4--

    -----BEGIN PGP SIGNATURE-----

    wsF5BAABCAAjFiEEr9eXgvO67AILKKGfcs+OXiW0wpMFAmZ6apQFAwAAAAAACgkQcs+OXiW0wpM+ rA//TYz8pxvrPvfox8rbomt4L9F9BdKJITNPnr/HIqJFkQC73alLUy/BjAaSOgI8zie3i1d78XTH YSZT71iRSiwnhrgxwjMgKhZnT1BT9r2SiUc897LYs2FySn05idtywjMBAIDNSjtgGFX1EWFgNk4b Eis/K9b0+cTOT+5Qt8sjuPfPGA1B4X+PcpEjfyzDJ2wjJ4O31EU1a4kNC/j0A1TCPc4F83rJq5R6 cRC0hvb95iUrZYjx1jY/mWb2siG+Q8lbvjaOgvS5sHOM8jmfhx419VUmmtb4l7UmAid6f0qBd+Yq oeYayoq5QUNxS7YF9eIemsBbYrdymxO7gSgREyJMzDWFUq23zXTPXOyiTSXqcBlANPvnoFaA4P5w vjji+6iswji/9EyRsKQwT9HUjXmcN5jZbLQGNaE0yj8HoD5X6heMZzi8OITxtoiC2aIg/+nGZWsg WTUkOATfW7NJcwlC1RegqKgEre6RC5en7tS5USpOTo4XtgZPvjyuKRMEcGLcRkPxWENsbEjyppPQ ym2e/cyptWwbJ1EgDdkXUgI986i5/s9XeNgszQ4jTCkGUNr0pmFaw8+fSJo6+qdlXNqCJEtOOLxC mUHYgXBkVCWS9qn1SKJBvTuWFhsGcTZ9PU1hAmpgyFJwn4rHXocu1vzaDplxyjMs1UTR0DXCdZWu h1o=
    =x9Tt
    -----END PGP SIGNATURE-----

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Philip Hands@21:1/5 to Scott Kitterman on Tue Jun 25 11:10:01 2024
    Scott Kitterman <[email protected]> writes:

    Do you have any examples of problems that this would have avoided
    (xz-utils isn't one - due to the way it's releases are done, it
    wouldn't be suitable for tag2upload)?

    I'm somehow reminded of Ignaz Semmelweis's attempts to improve medical
    hygiene by getting doctors to emulate the local midwives, who scrubbed
    their hands between patients, whereas the doctors generally didn't, and
    would alternate between performing autopsies and attending deliveries.

    I'd guess someone may well have pushed back against that, thus:

    Can you to name a single patient who has suffered as a result of
    existing practice?

    If I stretch that metaphor (possibly beyond breaking point), then one
    might think of our developers' laptops as the (potentially infected)
    cadavers, the newly uploaded source packages as the live births, and our tooling as the doctors' hands that may carry the infectious material
    from one to the other.

    I hope that we've been lucky enough to not actually have any of the
    relevant "infections" in the population of laptops that produce our
    packages, but would it not be wise to make it more difficult for such an infection to be silently transmitted?

    People state that a compromised machine can as easily commit malicious
    code to git as it could insert it into a source package, but the
    difference is that the malicious commit then needs to be pushed in
    order to work, exposing it to examination.

    In our metaphor perhaps the git commit step would equate to requiring
    doctors to touch a new Petri dish before each patient, which would at
    least record what was going on, and might give the opportunity to deal
    with the situation before real harm is done.

    Cheers, Phil.
    --
    Philip Hands -- https://hands.com/~phil

    --=-=-Content-Type: application/pgp-signature; name="signature.asc"

    -----BEGIN PGP SIGNATURE-----

    iQIzBAEBCgAdFiEE3/FBWs4yJ/zyBwfW0EujoAEl1cAFAmZ6h7UACgkQ0EujoAEl 1cDCWA/8DYNOqsaxfWNK0BbtCXz+8W8RyR1W1JZ/PsyIUT8cAblYT/r2EGgOgpsw qwCXA54t/g62A8if9i5QpVq4W1450yKa9GtqbjIvFDoxKMq9uOOKgzxpBgSxtpDU z9lEDMmLgNjEsrVZh2HkXmJgwDQERX1wC2VBkXp5OwxHeFhYLgyONwKh04usz81F vGTbwVNlA4xirXE3uBROg1TBDYwfIaBmdD+smfpv0GoufERtpn2x6naP7GyEIPy2 4iE34E2mNH3V44PLdLuGYB97AFKo+7A7DCzSOViX7BujK2/4cgwSvMNuQ0NHB9oU VPZdlisFIE9wdh1VwKaa4Z7uEIEh7JAuS2AO3DX8/dzSWp6eXq2k2tgf00l68IFI ZVUXSI+WEDFipCSXjXZOr486ioR6Bd4Upxk/YvL7+/CSGGFZxQnBP918mZJNi9ce GZ1dakrGhUgMKdx7OAUBmqoWZDuzSm6qSZFYKBsg+ZK1dj6b+0zM2LwtYi6M8N7H p8xM/FnCd5AesiEewPRaLHky49zHUN3JQMJZ9ki5ixm/ADqs/yOh4qT6NsbXSQD1 K/HyEAYdVyTa5WTh5p0I/MaKtX6gVb4wyoj6MCk0sXayRmjmheGARiC+4rUS7r+9 kzBuETkG24oYnUchAT6mnGOsrW0g78414wb0l0mU4WOZz8xqXso=rfqh
    -----END PGP SIGNATURE-----

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gatewa
  • From Simon McVittie@21:1/5 to Thomas Goirand on Tue Jun 25 12:10:01 2024
    On Tue, 25 Jun 2024 at 10:02:03 +0200, Thomas Goirand wrote:
    I do not think it is reasonable that a particular (git?) workflow, specific to the way *YOU* prefer working, gains special upload rights.

    This seems to be based on a misconception. tag2upload specifically
    doesn't require one specific git workflow! It supports several common git workflows, including "manage the patches in debian/patches using quilt".

    I've read
    about the deb-rebase workflow, I would hate it, and prefer managing patches with quilt directly.

    For what it's worth, I also prefer a "patches unapplied" workflow
    equivalent to the one used in pkg-perl, pkg-gnome and similar teams.

    I use gbp-pq rather than quilt, but the principle is the same, and they interoperate with each other - I can use gbp-pq for the same source package
    and git repo where my GNOME team colleagues use quilt, and it isn't a
    problem.

    Does this mean your tag2upload doesn't work for me?

    No, tag2upload does not require you to use git-debrebase. git-debrebase
    is one of several workflows that it supports. Using quilt or gbp-pq
    is another.

    I believe tag2upload supports all of the source tree layouts that dgit
    does, and I regularly upload gbp-pq-based packages with `dgit push-source`, which works fine.

    smcv

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Matthias Urlichs@21:1/5 to All on Tue Jun 25 12:10:01 2024
    This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --------------GFzBS3HW0b2UE1aX8pbCr20U
    Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64

    T24gMjUuMDYuMjQgMTA6MTEsIFRob21hcyBHb2lyYW5kIHdyb3RlOg0KPiBCdXQgdG8gdGhl IGNvbnRyYXJ5IG9mIHdoYXQgeW91J3JlIHNheWluZywgdGhhdCAqaXMgbm90KiB0aGUgcHJv YmxlbS4gDQo+IFRoZSBwcm9ibGVtIGlzIHRoYXQgeW91J3JlIHByb3Bvc2luZyB0byBzaWdu IHNvbWV0aGluZywgYW5kIHVwbG9hZCANCj4gc29tZXRoaW5nIGVsc2UsIHNpZ25lZCBieSAz cmQgcGFydHkgQ0kgdGhhdCB5b3UncmUgd2lsbGluZyB1cyB0byANCj4gYmxpbmRseSB0cnVz dC4NCg0KKGEpIEkgZG9uJ3QgdGhpbmsgb2YgdGhlIHRhZzJ1cGxvYWQgc2VydmljZSBhcyAi M3JkIHBhcnR5Ii4gaXQncyANCihwcm9wb3NlZCB0byBiZSkgcGFydCBvZiBvdXIgaW5mcmFz dHJ1Y3R1cmUgYW5kIHRyZWF0ZWQgYXMgc3VjaCwgDQppbmNsdWRpbmcgcmVzdHJpY3RlZCBh Y2Nlc3MsIHNlY3VyaXR5IHVwZGF0ZXMsIGFzc2VtYmxpbmcgdGhlIHNvdXJjZSBpbiANCmEg c2FuZGJveCwgYW5kIGFsbCB0aGF0LiBKdXN0IGxpa2UgdGhlIGJpbmFyeSBidWlsZGVycyB3 aXRoIHRoZWlyIA0Kc29tZXdoYXQgbGFyZ2VyIGF0dGFjayBzdXJmYWNlIHdoaWNoIHdlIGhh cHBlbiB0byBhbHNvIHRydXN0Lg0KDQooYikgSXQncyBub3QgKmJsaW5kKiwgZ2l2ZW4gdGhh dCBpdCdzIHJlYXNvbmFibHkgZWFzeSB0byB2ZXJpZnkgdGhhdCB0aGUgDQp0MnUgc2VydmVy IHdvcmtlZCBjb3JyZWN0bHkg4oCTIHVubGlrZSBlaXRoZXIgYSBkaXJlY3Qgc291cmNlIHVw bG9hZCANCihiZWNhdXNlIHRoYXQgZG9lc24ndCBoYXZlIGEgZ2l0IHRhZyBpbiB0aGUgLmRz YyBmaWxlLCBhc3N1bWluZyBpdCdzIGdpdCANCmJhc2VkIGluIHRoZSBmaXJzdCBwbGFjZSkg b3Igb3VyIGJpbmFyaWVzIChyZXByb2R1Y2libGUgYnVpbGRzIGFyZSBhIA0KdmVyeSBnb29k IGlkZWEgYnV0IHdlJ3JlIG5vdCB0aGVyZSB5ZXQpLg0KDQooYykgUmlnaHQgbm93IHdlIHRy dXN0IHRoZSBhY3Qgb2YgYnVpbGRpbmcgYSBzb3VyY2UgcGFja2FnZSBieSB0aGUgDQptYWlu dGFpbmVyLCBvbiBhbiBpbnNlY3VyZSBjb21wdXRlciB3aXRoIHJhbmRvbSBzb2Z0d2FyZSBv biBpdCwgd2l0aG91dCANCnNhbmRib3hpbmcgb3IgYW4gYXNzdXJhbmNlIG9mIGJlaW5nIHVw LXRvLWRhdGUgV1JUIG91ciBzZWN1cml0eSBhcmNoaXZlLCANCndoaWNoIG5vYm9keSBsb29r cyBhdCBlaXRoZXIgZHVyaW5nIHNpZ25pbmcgb3IgYWZ0ZXJ3YXJkcy4gR2l2ZW4gdGhlc2Ug DQpmYWN0cyBJIGhhdmUgdG8gYWRtaXQgdGhhdCBJIGRvbid0IHVuZGVyc3RhbmQgd2h5IHlv dSdyZSBzbyB2ZWhlbWVudGx5IA0Kb3Bwb3NlZCB0byB0aGlzIHByb3Bvc2FsLg0KDQooZCkg VGhlIGZpeCBmb3IgdGhlICJzb21ldGhpbmcgZWxzZSIgcHJvYmxlbSBzZWVtcyB0byBiZSB0 byBub3QgdXBsb2FkIA0Kc29tZXRoaW5nIGVsc2UgaW4gdGhlIGZpcnN0IHBsYWNlLiBFdmVu dHVhbGx5Lg0KDQpXZSBjYW4gdGVhY2ggb3VyIGJ1aWxkZXJzIHRvIHB1bGwgdGhlIGdpdCB0 YWcgZGlyZWN0bHksIGluc3RlYWQgb2YgDQp1bnBhY2tpbmcgYSBzb3VyY2UgYXJjaGl2ZS4g Q2FuJ3QgYmUgdGhhdCBkaWZmaWN1bHQuIChZZXMgSSBrbm93LCBmYW1vdXMgDQpsYXN0IHdv cmRzIGFuZCBhbGwgdGhhdCwgYnV0IHNlcmlvdXNseTogaXMgdGhlcmUgYW55IGZ1bmRhbWVu dGFsIHByb2JsZW0gDQp3aXRoIHRyeWluZ8KgImdpdCBjbG9uZSAtLWRlcHRoPTEgLWIgZGVi aWFuLyRWIGh0dHBzOi8vZ2l0LmRnaXQuZC5vLyR7UH0gDQoke1B9XyRWIiAoKikgYmVmb3Jl IGZhbGxpbmcgYmFjayB0byB0aGUgYnVpbGRlcidzIGVxdWl2YWxlbnQgb2YgImFwdC1nZXQg DQpzb3VyY2UgJFA9JFYiPykNCg0KKCopIHRoZXJlICptYXkqIGJlIGEgc3RlcCBtaXNzaW5n IGhlcmU6IHlvdSBtaWdodCBuZWVkIHRvIHJ1biBkZ2l0IA0KbG9jYWxseSBpZiB5b3UgZG9u J3Qgd2FudCB0byBwdWxsIHRoZSAiYXJjaGl2ZS9kZWJpYW4vJFYiIHRhZyB0aGF0IA0KdGFn MnVwbG9hZCBtYWRlLiBJZiBpbiBkb3VidCB5b3UgY2FuIGFsd2F5cyBkbyBib3RoLCBhbmQg dmVyaWZ5IHRoYXQgDQp0aGV5IG1hdGNoLiBPbiB0aGUgdGhpcmQgaGFuZCwgaWYgdGhlIHNv dXJjZSBpcyBwYXRjaC1hcHBsaWVkIGFueXdheSAoSSANCmRvbid0IGtub3cgaG93IGNvbW1v biB0aGF0IGlzIGdvaW5nIHRvIGJlKSwgeW91IGNhbiBqdXN0IHVzZSBpdCBhcy1pcyDigJQg DQppbnN0ZWFkIG9mIGFza2luZyBkZ2l0IHRvIHNwbGl0IG9mZiBwYXRjaGVzIHdoaWNoIHlv dSB0aGVuIGltbWVkaWF0ZWx5IA0KcmUtYXBwbHkuIDotLw0KDQotLSANCi0tIG1pdCBmcmV1 bmRsaWNoZW4gR3LDvMOfZW4NCi0tIA0KLS0gTWF0dGhpYXMgVXJsaWNocw0KDQo=

    --------------GFzBS3HW0b2UE1aX8pbCr20U--

    -----BEGIN PGP SIGNATURE-----

    wsF5BAABCAAjFiEEr9eXgvO67AILKKGfcs+OXiW0wpMFAmZ6lEgFAwAAAAAACgkQcs+OXiW0wpNR Cg//WqeqRodluO2DKQPuoT4cgv9xZ5DmlibBeDGiOPqajt7Q+mRFyGNG1kYWT8oBqCioJb30/9WY ZfwwJBeYDdcA+qGYTWxsdtpOP2KbylfotmKvZGx8oKBkIi+jW471hRRPQsq8+SE2oloDEJA+KSGI xIk3OupUBpyeEShsfUw6UI3gNqO30HOWI/6e34Rxf5eVx7JolajD9BAqBq1ABEVh3EAEe8n9rAKL /nYZsGNHrotlpAZgL1JBCdh4zvPjQSRmxqCrt1GxbMX6zvrsNw++7jLmk2DwhLHLDM24hFxPe4bG zIcT/7i7dsDT3oXvWi2LWpkZ1TYkj4PzWok81ZIQo1XqHAUfn91uZzFKEYW2puNp8JWoTNnHM+3B vLllYju3uT4WSgHWG0e8A70CPardo06mUxt1P9fjDjvnFKARD0HR1Yb2skMz92e5FaZ1KwvZwJwY WU4r7ozcIH0aBoO7Loa4+gKINCMMR5eM2MDDlpKRriJNpDhv+S/GkvFfThONLmOPnOJxIxgvHULL RPQfVmnsQjUwAW/CY+hI9lGV09J/9IEFdDMQH7QtxqT/2JGV8fycQy2PHJFzmmvzzESgO2aclo2e fNzXEzcNIBHRf8p7WqBUK8+gUX87jZfZ6CUqdFs7tVc3fpjQ6G2tME1B4y3IwW/qH5Fu/53uYWAW +Yc=
    =kCKi
    -----END PGP SIGNATURE-----

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Ian Jackson@21:1/5 to Simon McVittie on Tue Jun 25 12:20:01 2024
    Simon McVittie writes ("Re: Summary of the current state of the tag2upload discussion"):
    I believe tag2upload supports all of the source tree layouts that dgit
    does, and I regularly upload gbp-pq-based packages with `dgit push-source`, which works fine.

    This is correct. [1]

    Ian.

    [1] tag2upload doesn't (yet) support all the possible orig tarball
    handling approaches. [2] For new Debian *revisions* this doesn't
    matter, since t2u uses the existing orig. For a new upstream version,
    t2u doesn't yet support (for example) pristine-tar.

    [2] dgit doesn't handle orig generation; for a new upstream version it
    requires you have the proper orig already.

    --
    Ian Jackson <[email protected]> These opinions are my own.

    Pronouns: they/he. If I emailed you from @fyvzl.net or @evade.org.uk,
    that is a private address which bypasses my fierce spamfilter.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Scott Kitterman@21:1/5 to Philip Hands on Tue Jun 25 14:30:02 2024
    On June 25, 2024 9:02:45 AM UTC, Philip Hands <[email protected]> wrote:
    Scott Kitterman <[email protected]> writes:

    Do you have any examples of problems that this would have avoided
    (xz-utils isn't one - due to the way it's releases are done, it
    wouldn't be suitable for tag2upload)?

    I'm somehow reminded of Ignaz Semmelweis's attempts to improve medical >hygiene by getting doctors to emulate the local midwives, who scrubbed
    their hands between patients, whereas the doctors generally didn't, and
    would alternate between performing autopsies and attending deliveries.

    I'd guess someone may well have pushed back against that, thus:

    Can you to name a single patient who has suffered as a result of
    existing practice?

    If I stretch that metaphor (possibly beyond breaking point), then one
    might think of our developers' laptops as the (potentially infected) >cadavers, the newly uploaded source packages as the live births, and our >tooling as the doctors' hands that may carry the infectious material
    from one to the other.

    I hope that we've been lucky enough to not actually have any of the
    relevant "infections" in the population of laptops that produce our
    packages, but would it not be wise to make it more difficult for such an >infection to be silently transmitted?

    People state that a compromised machine can as easily commit malicious
    code to git as it could insert it into a source package, but the
    difference is that the malicious commit then needs to be pushed in
    order to work, exposing it to examination.

    In our metaphor perhaps the git commit step would equate to requiring
    doctors to touch a new Petri dish before each patient, which would at
    least record what was going on, and might give the opportunity to deal
    with the situation before real harm is done.

    I don't disagree with any of that, in principle. I'm not against improvements that help address security concerns that we believe are currently only theoretical. I do think that the anti-source package rhetoric in the message I was replying to was over
    the top.

    Security is inevitably tied up in trade-offs. One of the trade-offs for tag2upload as currently designed is the loss of any cryptographic connection between the person that uploaded the package and the source package in the Debian package archive.

    I understand that different people will value that differently. My impression is that the message I was responding to was essentially claiming that it's no trade-off at all because, due to the massive risk of unknown transformations when the source
    package is built, there's no value to the signature.

    I think that's nonsense.

    Scott K

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Russ Allbery@21:1/5 to Thomas Goirand on Tue Jun 25 18:00:01 2024
    Thomas Goirand <[email protected]> writes:
    On 6/25/24 11:56, Matthias Urlichs wrote:

    (a) I don't think of the tag2upload service as "3rd party". it's
    (proposed to be) part of our infrastructure and treated as such,
    including restricted access, security updates, assembling the source in
    a sandbox, and all that. Just like the binary builders with their
    somewhat larger attack surface which we happen to also trust.

    It's 3rd party in the sense that the person uploading isn't generating
    or even signing the source package.

    The 1st party vs. 3rd party language is always murky, and I'm not sure how useful it is. (For example, who is the 2nd party? Isn't the Debian
    archive and its surrounding machinery 2nd party, not 3rd party?)

    I think a better way of framing this is that there are three entities
    already involved in uploading a package to Debian:

    1. The uploader, who is affiliated with Debian but in the typical case
    does not have access to any of the Debian infrastructure.
    2. The Debian infrastructure itself: dak, buildds, the archive, etc.
    3. Some random end user or downstream tool that wants to use the package.

    The tag2upload proposal moves the source package build from 1 to 2.

    I am old enough to remember when nearly all i386 builds were done by 1 and
    we decided to move them all to 2, so to me this is previously trodden
    ground and some of the reasons why we did that for binary packages also
    apply here.

    It's blind because I'm not running it: some infrastructure is.

    It's blind in the same sense that the amd64 buildd is blind. There are a
    bunch of logs that you can go look at if you want to, but people generally won't unless they think there's some sort of problem.

    https://isdebianreproducibleyet.com/

    IMO, we can consider it is there, and fix the remaining 3.6%, or at
    least, exclude these from the discussion and consider they need to be
    fixed to be part of the game.

    As an aside, I'm not sure there's any ethical way to do this (and any way
    to do this that doesn't result in people panicking about a test), but the security person in me badly wants to run a red team exercise with
    reproducible binary builds. If we intentionally introduce a (benign) bit
    of code into an amd64 binary build without anyone involved in either reproducible builds or maintenance of that package knowing, how long would
    it take for this to be flagged as a possible compromise?

    We have a lot of good reasons to believe that this is an excellent way to detect certain attacks, but so far as I know, we've not tested it. It
    would be very interesting to do that! (Maybe this has already been done
    and I just didn't know about it?)

    I expect that the vast majority of DDs are using sbuild on their
    laptops.

    I would be stunned if this were the case. I am, and it was not trivial to
    set up, finding the right instructions took me a bit, and I am dubious
    that many people bothered. None of the people whose packages I've
    sponsored have ever used sbuild so far as I know.

    Also, source package builds generally aren't done inside sbuild if I
    remember the architecture correctly. (Which I might not; please correct
    me if I have this wrong.) My recollection is that the source package
    build is normally done outside sbuild and then copied into it.

    I'm opposed to trusting only a signed git tag in your proposed implementation, when it has been proven we can do much better.

    "Proven" to me implies that we have an implementation of tag2upload that
    has better security properties. I don't think this is true? If it is,
    I'd love to look at it.

    --
    Russ Allbery ([email protected]) <https://www.eyrie.org/~eagle/>

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Matthias Urlichs@21:1/5 to All on Tue Jun 25 19:40:01 2024
    This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --------------UyaMoJhvFHHLaWklM29gFQm6
    Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64

    T24gMjUuMDYuMjQgMTg6NTAsIHRob21hc0Bnb2lyYW5kLmZyIHdyb3RlOg0KPiBIb3cgZG9l cyBvbmUgY2hlY2sgdGhlIHJlcHJvZHVjaWJpbGl0eSBvZiBnaXQgdG8gc291cmNlIHBhY2th Z2UgDQo+IHRyYW5zZm9ybWF0aW9uPw0KDQpUaGUgc2FtZSB3YXkgeW91IGNoZWNrIHJlcHJv ZHVjaWJpbGl0eSBvZiBiaW5hcnkgcGFja2FnZSB0cmFuc2Zvcm1hdGlvbjogDQp5b3UgcnVu IHRoZSBzYW1lIHRoaW5nIG9uIGEgc2VwYXJhdGUgc3lzdGVtIGFuZCBjb21wYXJlIHJlc3Vs dHMuDQoNCk5vdGUgdGhhdCB3ZSBkbyBub3QgYnVpbGQgYmluYXJ5IHBhY2thZ2VzIG9uIHRo ZSBERCdzIG1hY2hpbmUgYW5kIGNoZWNrIA0KdGhhdCB0aGUgcmVzdWx0IGlzIGlkZW50aWNh bCB0byB0aGUgYnVpbGRkJ3Mgb3V0cHV0LiBXaHkgZG8geW91IGRlbWFuZCANCnRoYXQgYSBz b3VyY2UgdHJhbnNmb3JtYXRpb24gc3RlcCBkb2VzIHRoaXMsIHRoZW4/DQoNCi0tIA0KLS0g cmVnYXJkcw0KLS0gDQotLSBNYXR0aGlhcyBVcmxpY2hzDQoNCg==

    --------------UyaMoJhvFHHLaWklM29gFQm6--

    -----BEGIN PGP SIGNATURE-----

    wsF5BAABCAAjFiEEr9eXgvO67AILKKGfcs+OXiW0wpMFAmZ6+4cFAwAAAAAACgkQcs+OXiW0wpMv 4Q/+JnYiTZ+BVlxXn36wLI16tHONKlmcCeNyeSvkZqluGKi62SrKsVwZPTvdF5U3R0N570DqQ3Cr 7emHyb4gpJumYDnQhBI6EfB3qVi6iX7+MH6U9rFT2CQPGZiVbx9K4FvuO7xtvyAkMgeqH1HdaQcc Czg+Tsl9kw2bu6pg+PCaKRF4uajiabnCPkjsVbXzFI+WR/mW6MgR1udZP3WDg9PXLaUSHMnzW0Iz dnDA0ddnFyOu+pwL6S54kUUg144FXiOv7rI4uuWqS+eVuyvW6M75ikIoIS6YXNSTdIFb/pWD+LrR ocGflWDh8k1dKgalPT95YFQMRn2qyoPTgUrUPRktkZlOpLaNF6R1dGPNgWsCQyNf5zfkZ//bEJOv A5hNvfft9ZD4M2aBsP0ePji4OVHvZw47WQdhY8uRdfw0ytTPA43MgGxaFCSi2MLNMf95bFVzCZYK x5tGLkMEwBkKRsf4Hn6/jacuarI/v7gPKdg0yZ+Yj9jpHggz77/U9v27nWI6O4WeXGFUj1cm97yf O9F4g4I5+NhY3cx8FyuqQew3mSIWxIEzuzKHJCA91XwkkD0WN0BIG1g/06regiuQEhBMs2/gc/8x 0jaZCOq3z1q1QbK4AYmKLl7CRvok6XdZzQnqWg+6pnn6LKf7c+4UZvZyF2eljj3d9PlBkjRLGgQL NOU=
    =+9L/
    -----END PGP SIGNATURE-----

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Russ Allbery@21:1/5 to [email protected] on Tue Jun 25 19:20:01 2024
    [email protected] writes:
    On Jun 25, 2024 5:50 PM, Russ Allbery <[email protected]> wrote:

    The tag2upload proposal moves the source package build from 1 to 2.

    NO ! That is NOT what you are proposing. There's been a 10 years long
    effort to have package reproducibility, your proposal is trowing all
    away. How does one check the reproducibility of git to source package transformation?

    You check it exactly the same way that you check binary reproducibility:
    you run it twice in different security contexts and see if you get the
    same results. *If* you're using a regularized transformation of Git to a source package, such as those workflows implemented by dgit (and thus by tag2upload), the problem is at least an order of magnitude easier than
    binary package reproducibility.

    If we were signing source packages manifests locally, then tag2upload
    were also producing it, check it is the same as in the pushes tag, and
    used the sgnature, then we'd be good. But you don't want this because:

    - you feel it is not convenient
    - it is hard to implement

    I think you are excessively focused on making the uploader one of the
    checks on the reproducibility of the source package. The uploader is does
    not have unique capabilities for detecting unreproducible source builds.
    The important point for reproducible source builds is to build the package twice in separate security domains so that an attacker will have great difficulty compromising both builds at the same time.

    I completely agree with embracing reproducible source builds. That's why
    I would like more people to use tag2upload or dgit, which regularize the
    source builds in a way that makes reproducibility testing easier.

    As an aside, I'm not sure there's any ethical way to do this (and any
    way to do this that doesn't result in people panicking about a test),
    but the security person in me badly wants to run a red team exercise
    with reproducible binary builds. If we intentionally introduce a
    (benign) bit of code into an amd64 binary build without anyone involved
    in either reproducible builds or maintenance of that package knowing,
    how long would it take for this to be flagged as a possible compromise?

    Are you hereby vouching for reproducibility to become RC bugs?

    No? None of those words occurred in my message? I'm not opposed to it,
    but I think the folks working on reproducible builds should be the ones to decide when it's practical for that to be the case.

    I think we're making some assumptions about the usability of binary
    package reproducibility for detecting security breaches. Those
    assumptions sound good in theory, but ideally we would test them. One of
    the reasons to test them is that those last few percentage points can make
    a big difference between "huh, this package became unreproducible,
    probably a bug somewhere" and "we have detected a possible security
    breach," and I don't know where we are right now in terms of how people
    would react.

    Watch the Kosovo lightning talk where Didier shows what he did. It is a proven concept.

    If this is the proof of concept where the *.dsc file is encoded in a Git
    tag (sorry, there have been several proofs of concept and I lose track of
    which person was associated with which one), I understand it and have
    already said why I don't think it will work reliably enough in its current form. (Summary: It relies on the reproducibility of tar and compression programs.) We should measure reproducible source packages by comparing
    the unpacked source packages. It's a lot more robust.

    --
    Russ Allbery ([email protected]) <https://www.eyrie.org/~eagle/>

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Bdale Garbee@21:1/5 to Russ Allbery on Tue Jun 25 20:10:01 2024
    Russ Allbery <[email protected]> writes:

    Also, source package builds generally aren't done inside sbuild if I
    remember the architecture correctly.

    I believe you are correct.

    In my own config, which uses cowbuilder to provide the clean chroot
    build environment, the process I use creates a source package in the
    cloned repo in my normal filesystem, then hands that source package into
    the clean chroot build environment where it is used to build binary
    packages. I test those packages in various ways, and if I like the test results, I sign and upload the source package. In that way, I'm at
    least testing the source package I create even if I'm not carefully
    inspecting it?

    I'm opposed to trusting only a signed git tag in your proposed
    implementation, when it has been proven we can do much better.

    "Proven" to me implies that we have an implementation of tag2upload that
    has better security properties. I don't think this is true? If it is,
    I'd love to look at it.

    I agree. I think tag2upload or something like it would be a really
    useful addition to Debian infrastructure. If there's a better way to do
    what the tag2upload proposal does, great, but time has shown that Debian
    makes better decisions when comparing competing implementations
    expressed as source code than merely as human assertions.

    Bdale

    --=-=-Content-Type: application/pgp-signature; name="signature.asc"

    -----BEGIN PGP SIGNATURE-----

    iQIzBAEBCgAdFiEEHguq2FwiMqGzzpLrtwRxBYMLn6EFAmZ7A54ACgkQtwRxBYML n6EjkRAAm9cha/lc5uO0pLVlkIP/MX82aTXnTeRSUIlu2+NWJxAYj1O/SqPanNz5 6Eo0UjRPF7BVnyEBL2PsLWsHSWIdt3XotVXD/o3ldbTfChaQKroNX3JDGwBc9YrZ z4ytD9bBgu2v1w36p3v6nkYCVAcEoDR2keXoWHVEu2vYJ5aGBuyuUms4w+q5q7Is xV/YGKntH7/CPjc71GyWzBXgxc/JxbQoDLSfmx3YrLvrTDhPd5YXUabP78EoeJft MBLIUR0dLO9cHMut5IkgI0sVpzpoLK7xfpndwhcLczP+jE8aLmidiR6/QY6bNQbU ImuHR6G/n6FnxWFkIocZSqtFIRs+3TM2oQWxTlq5vbtued8AbbeEGqzQOZFB2PSX B2co2eoJCzYQA3AS5TElZYe+eH4QL7zigMRDLejQukAZK+A4KrnkAfRqM+c/+kC9 fAnsQZlNECgUOZcietbDXuup1+erIzGqBFyE15O9Wz7WUd0u113tU2KTw0ofFQkb ns3vVANk8gaC2FQFsUkrcEGcztck5DXifIRyXyQ5lygcLcIJWtOuzC2/8TxdiEHb 0eZXLOyVn6MlB5V8LQn0DaDcnTRAxKXhj0bNXTdQ5xsfTf3hDLPAISLORGs62y6J HnrSFjlr3ROmwQj7FrjATgLv3ZJPqdRY15Ti+o3I8thIW89Ha10=hhfQ
    -----END PGP SIGNATURE-----

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Andrey Rakhmatullin@21:1/5 to Jun MO on Tue Jun 25 20:10:02 2024
    On Wed, Jun 26, 2024 at 01:44:10AM +0800, Jun MO wrote:
    For the third purpose, I believe only weak intent information can be derived from the uploader signature today. It is common practice in Debian to verify the Git tree that one wants to upload, run a package build step, and then blindly sign the resulting source package. [...]

    I feel this is somehow ... wrong. I think, *currently*, it should be a moral obligation for a DD to make sure the resulting source package is correct.

    I don't think I ever upload source packages without actually building them
    (my normal workflows include building a package in sbuild producing a
    binary .changes and debs, that I run lintian and other checks on, and a
    source .changes that gets uploaded if a binary upload is not required).

    But I never look inside generated source packages, I don't even know what
    to check there.

    Although many people claim the source package is an build artifact, I
    think the source package is still supposed can be read by a human,
    unlike binary packages. I think it is true especially for patches under d/patches/ as they are very similar to git commits.

    My git repos represent unpacked source packages. I obviously read what's
    inside my git repos and assume the same goes into my source packages. I
    don't test this assumption.


    --
    WBR, wRAR

    -----BEGIN PGP SIGNATURE-----

    iQJhBAABCgBLFiEEolIP6gqGcKZh3YxVM2L3AxpJkuEFAmZ7B4ktFIAAAAAAFQAP cGthLWFkZHJlc3NAZ251cGcub3Jnd3JhckBkZWJpYW4ub3JnAAoJEDNi9wMaSZLh U4AP/0nGrQlp0Hyagfxgnen6axwIywKvIRVju/HfdJwBDiZL0A/YnIVxqx7m87Ij V5odq+/l47A3UaS0Qf/AtbIp3QUm2BJY3RfbCnqLBZLlTzdHUeyMRomu6opWy6Oz e9m34kBlHIcIhqUsXBd/DA0VDk0qCOWWInjElzGXEUtUsBe1m+Qd6QfWexbVoOYc J0NUjOCEWgiNcctuiDY/DbAQUWrgOBHC26S5yPuhAtO+N9/X+WQFz7KvVa+0g3ai 1ctmJpTm48Tsr75Mgy587wPhhZDYTOGn+ia+QXAUHBlsdH3xI10ox+hH5CL5VfFw 6/AJj9tImf+3gz0oyZ0mORbv8zKJiKR7qyUDbFf7iACAn2ze7sHD6sf1edLRdZbp epZApy9z21vrtt+/oXKWzQhSdoLcqM5tCWex6gn176aEcUo2cWu7Ch/0ixEnOUI7 Wbcg4A9qnIxsHCVtjJhZik02bc6TkW89Mg5CZUjKxmLE3Z4llXEAuxgHQnUrcjsS kUx6bhT3GTx1PWa2BwtSIFPkHOmKXGmOeu44LKkKCGmRgnDN8WDISszMlm2QuroB +/JIFQpMVsHLDG3WH7qX+oHpVQliPcPOn/gK9JiTZOXVX2VERo0nA91fDd4jN1yC ZsvYgukgeKmdWYYC/lfgxPI4nwXtncLWOWnmT9ZYpUs1yIBz
    =d32J
    -----END PGP SIGNATURE-----

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Russ Allbery@21:1/5 to Bdale Garbee on Tue Jun 25 20:20:01 2024
    Bdale Garbee <[email protected]> writes:

    In my own config, which uses cowbuilder to provide the clean chroot
    build environment, the process I use creates a source package in the
    cloned repo in my normal filesystem, then hands that source package into
    the clean chroot build environment where it is used to build binary
    packages. I test those packages in various ways, and if I like the test results, I sign and upload the source package. In that way, I'm at
    least testing the source package I create even if I'm not carefully inspecting it?

    Right, this is similar to what I do.

    To make the point explicitly, even though I *think* it's probably obvious
    to everyone reading, building binary packages locally and testing them
    will only catch malicious code injection in the source package if the
    attacker made a mistake. An attacker who is already sneaky enough to be targeting Debian source packages is quite likely to take conceptually
    similar precautions as the attacker in the xz-utils case took to avoid
    that code being detected by the uploader before upload (activating the malicious code only when built on a buildd, for instance).

    You will catch *some* sloppy attackers this way, to be sure, just like
    every step that a human takes before upload is going to catch some attacks because the attacker will have missed something and there will be some
    weird output or weird behavior that makes the uploader stop and go hmm.
    But a good attacker knows this and will try to avoid detection at that
    stage. And an attacker can test their attack strategy beforehand: they
    have a copy of your package and can try various code injection techniques
    and see which ones are the most likely to avoid your notice.

    This is a human psychology problem that's very common in the security
    world. Serious, sneaky attacks like this are rare. Most people will
    never be a target of one. Buggy source packages are very common and
    happen routinely. Therefore, the uploader is going to test for the thing
    that happens a lot, and is not going to effectively test for the thing
    that happens approximately never. The attacker knows all of this, and
    will choose their attack strategy accordingly.

    --
    Russ Allbery ([email protected]) <https://www.eyrie.org/~eagle/>

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Bart Martens@21:1/5 to Matthias Urlichs on Tue Jun 25 20:50:01 2024
    On Tue, Jun 25, 2024 at 08:55:56AM +0200, Matthias Urlichs wrote:
    On 24.06.24 23:20, [email protected] wrote:
    I see it as signing the very thing that is pushed to the Debian archive. You aren't uploading a bunch of git SHA to the archive but a source package. It feels very normal that therefor, that is the thing that we would like you to sign. Too bad this is less convenient for your
    workflow, but that is the correct semantic.

    Well, yes. Right now this is the case, and t2u adds an additional step to that equation which historically we didn't have.

    However …

    (a) the thing I'm signing isn't the thing I worked on. I didn't look at it and, given a git-centric work flow, nobody else will either. It feels very unnormal to me that I'm signing some artifact that I didn't even look at. Heck it felt unnormal to me 20 years ago when I joined and built my first packages.

    The unit of signing should remain close of the unit of distribution. It makes the signer aware of what exactly they are responsible for. I mean, that is in the current workflow, with the signer being the DD doing the last human verification.


    (b) we might decide, sometime in the future, that sources.dgit.d.o is to be treated as part of "the Debian archive" and that our builders shall pull
    from there instead of unpacking a tarball if the maintainer used t2u, thus effectively removing your objection.

    In my view git will be replaced by the next vcs while Debian will still be distributing source packages to be finally signed by some human. Sure, git is useful today and it's worth giving it a prominent place in the workflows of today. I just think that the source code package that gets distributed should remain independent of any product like a vcs that happens to be hot today.


    --
    -- mit freundlichen Grüßen
    --
    -- Matthias Urlichs





    --

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Russ Allbery@21:1/5 to Jun MO on Tue Jun 25 21:10:01 2024
    Jun MO <[email protected]> writes:
    Russ Allbery <[email protected]> writes:

    For the third purpose, I believe only weak intent information can be
    derived from the uploader signature today. It is common practice in
    Debian to verify the Git tree that one wants to upload, run a package
    build step, and then blindly sign the resulting source package. [...]

    I feel this is somehow ... wrong. I think, *currently*, it should be a
    moral obligation for a DD to make sure the resulting source package is correct.

    Yes, I think this is the initial reaction that most people have. You're uploading this thing and it's your responsibility to check that it's
    correct. This sounds correct in theory and doesn't work in practice, but
    the reasons why are subtle and require getting into some of the philosophy
    of security.

    (Warning: this is kind of long.)

    [snip the elaboration of this point, which I think correctly describes the problem]

    However due to possible bug/change in the chaintools, malwares, mistakes
    or other things, the DD's intent may not present in the resulted source/binary package. And *currently* in buildd, binary packages are
    still built from source packages. So I think it should be a moral
    obligation for a DD to make sure his/her intent is present in the source packages (and finally present in the binary packages).[1] I know that
    DDs are volunteers and it is impossible for them to perform a thorough inspection of the source package. But I feel that it is lack of moral obligation that a DD blindly sign the resulting source package without
    even spend a few second look what is inside it, if he/she knows the
    resulting source package may differ from his/her intent. And for
    tag2upload, I think there is the same moral obligation for a DD even
    though he/she do not need to sign the source package.

    The basic problem (and this may sound flippant but it isn't) is that DDs
    are humans and humans are so bad at the type of validation that you would
    want them to perform that there is essentially no chance that this will
    happen systematically and effectively.

    People, when trying to solve a security problem, will tend towards a
    fairly straightforward approach at first: figure out where the attack
    happened, figure out how to detect the attack, and then add a new process
    to check for that attack. When another attack is found, add another
    process to detect that attack. And so forth.

    This is a very natural approach, and in some cases it can work, but in the general case what you get is airport security. It has precisely that
    model: planes were hijacked with weapons or blown up with bombs, and
    therefore we check every passenger's luggage for weapons or bombs. Each
    time we find a new weapon, we add a new check. In this case, we have gone
    far, far beyond anything that Debian would have the resources to do: we
    hire an army of people whose entire job is to do these checks, we give
    them a bunch of expensive equipment, and we regularly test them to see how
    well they do at performing this screening.

    In independent tests of TSA screening (the US airport security agency),
    that screening misses 80-95% of weapons or bombs.

    This is a very common cautionary tale in the security community, and it's
    not because the agency is incompetent, or at least any more incompetent
    than any group of fallible humans told to do a boring job over and over
    again will be. This is not a TSA problem, it's a human being problem.

    The assumption on which this security approach is based is not as true as people want it to be. You cannot simply tell people to check something
    and expect them to find problems if those problems are extremely rare and
    99% of the time they will find nothing. The human brain is literally
    hostile to this activity. It is not optimized for it and will not do it reliably. To get the accuracy as high as airport security achieves
    already requires training, testing, and a whole lot of assistance from technology that doesn't get bored or inattentive, and it still fails more
    often than not.

    You have probably run into a similar version of this problem if you have proofread something that you have written. If you are like most people
    (there are some people who are an exception to this), you will miss
    obvious, glaring errors that someone else will see immediately because you
    know what you intended to write and therefore that's what you see. With a great deal of concentration and techniques to override your brain's normal behavior, such as reading all the sentences in reverse order, you can
    improve your accuracy rate, but you will still regularly miss errors.

    Security is even worse because it's adversarial. You're not attempting to
    spot static bugs that are sitting there waiting to be detected. You are
    trying to defeat an intelligent, creative, adaptive enemy who watches what
    you do and adjusts their attack approach to focus on your weak spots. And
    in the case of computer security, *unlike* airport security, catching the attacker once doesn't let you arrest them and prevent them from ever
    attacking you again. The attacker can just try again, and again, and
    again until they succeed.

    This doesn't mean that spot checks are useless. Doing an occasional
    manual check can catch unanticipated problems and snare a lot of
    attackers, and it's part of a good overall security strategy. But this approach isn't *reliable* and shouldn't be the front line of the strategy.

    This problem is one of the reasons why there is so much emphasis in
    computer security at looking at the whole system, including the humans involved, and anticipating how the humans will fail. Humans are
    vulnerable to boredom, to inattentiveness, to alert fatigue, to seeing
    what they expect to see, to laziness and haste, to emotional manipulation,
    and any number of other factors that interfere with them following
    processes. The security design has to account for this.

    Some processes are worse than others. Processes that require a human to
    check something for errors that will not be present 99% of the time, and
    where it is overwhelmingly likely that no one will ever know if the human
    did the check properly or not, is nearly a worst-case scenario. The check
    just won't happen reliably, no matter the intentions of everyone involved. People will skip it "just this time." People will open the thing they're supposed to look at and their eyes will point at the screen but their
    brain will not actually analyze anything they're looking at because it
    doesn't believe it will find anything.

    Systems that need better humans won't work reliably. You can say that
    it's a moral obligation and make people feel guilty for not following the system properly, but this still doesn't get you reliable performance, only
    a bunch of stressed, guilty people who are now demotivated on top of all
    the problems that you already had.

    This is why good security design is all about having humans do the things
    that they're good at or at least okay at (patch review, for example, which
    can still be tedious but which is substantially more novel and interesting
    than reviewing source packages that will be exactly what you expect nearly every time), and not relying on humans to do the things they're bad at.
    This is the whole philosophy behind reproducible builds: don't make humans tediously compare things, set up mechanisms so that computers can compare things. Computers don't get bored or inattentive or tired and do not care
    in the slightest about doing exactly the same thing millions of times to
    get only one anomalous result.

    This is also why even for the case of finding bugs in source packages,
    which is much less of a worst-case scenario than finding maliciously
    injected code that is trying to hide, "test the package before you upload
    it" is only a fallback strategy when you don't have anything better. A
    much better strategy is to encode the tests that you would perform as
    programs and make the computer run them. This is why we write test suites
    and autopkgtests: then all the tests happen with every upload and the
    computer finds problems and no human has to try to force themselves (and
    likely fail) to perform the same tedious steps over and over again.

    One final philosophical note: humans also have incredibly limited energy.
    This is particularly a problem in a volunteer project, as you noted in
    your footnote. There is way more to do than we have resources to do. I
    want to use that energy as wisely as possible. That means I
    *particularly* do not want that energy to go into doing things that humans
    are bad at and that probably won't be done well anyway. This means
    designing the whole upload system so that we can create mechanisms like reproducible binary builds, reproducible source builds, autopkgtests, and
    other ways to move the load onto computers and off of humans and save that precious human attention for the things that only humans can do.

    --
    Russ Allbery ([email protected]) <https://www.eyrie.org/~eagle/>

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Philip Hands@21:1/5 to Aigars Mahinovs on Tue Jun 25 22:20:01 2024
    Aigars Mahinovs <[email protected]> writes:

    Do you actually check that the contents of the source *package* (after all operations done by dpkg-source and possibly other tools) actually match
    what you were looking at before in your source work tree folder?

    Until this thread, the idea that doing so might be prudent had not even
    occured to me TBH.

    Now that it has, it also occurs to me that if I actually were subject to
    an attack that was attempting to sneak something in at this point, my
    system might well have been tampered with to render it unable to detect
    the change (by replacing diff with a version blind to the changes etc.)

    Cheers, Phil.
    --
    Philip Hands -- https://hands.com/~phil

    --=-=-Content-Type: application/pgp-signature; name="signature.asc"

    -----BEGIN PGP SIGNATURE-----

    iQIzBAEBCgAdFiEE3/FBWs4yJ/zyBwfW0EujoAEl1cAFAmZ7JQEACgkQ0EujoAEl 1cCQFw//ZREEHTWJaFR8qRS/u906t6X7D59zlg705OTsurAlxCYqFw6Oqc73nDRq hfClyrIrokKuZexw0sVREdwuy3RcAcKMAO2mUaq5n/uCBDTPpQoThYvDL0f7j1nJ s3ZFgdXf4T1LNL+cH0Ue2glZ+B2YPI/+Fxa011kruIf+Zw05IZtwPX8uZnKdcUfV b8aiS82ovqDOtCb0fNChuK12HZpOOcuuhIBlrgQd1iTl7VAyQiR6jE9dw6pMQcv8 lsEGSiTobYkXea7d+WXJFCchFQdOKwy8MQHEyzG6m8DaJ2yfXF7ydFDqbzU/4dWb W2OfwyJxrTiRsBDdOyGqhl3mPCXvmQBg2cjG7sRRBTT+UvTfLuG6osUibag390we N38SXTVMbHPAcdGYiVwTHk5iA/LsDI9s+aE69IZkEl9LqWCO8GIr0CBbNMFGBTqP 4QzzKO5qkwsIdtZwAcWnH310/U58Mu1PoqeNEBIg4pRELLfWrouQBt4vFoXZYuQa VWT+XKh/hewkaVsMHWaoiVVcpV2U0dn+0eMXxpemlsL0zNalObSGMvYAIDeKBa5A hqmOXQ6QUYEwgWitOzLhO+Nvj/KfZ8HRCk36uDheuOoJu6TrPmTpkvx3eogZ+F+Q GGkvZTeaEK5r/wmBLh9ColBzR3LOft6UF9xIXM1epXoMb9/LotQ=6v5f
    -----END PGP SIGNATURE-----

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gatewa
  • From Salvo Tomaselli@21:1/5 to All on Tue Jun 25 23:20:02 2024
    I think that the very same people who never check what's in a tarball are very unlikely to start checking diffs.

    Plus… a malware doesn't have to be obvious, so a superficial check might not reveal anything at all anyway.

    In any case, last time I bumped version to a package I diffed the sources to see if there was anything obviously strange.

    I did this without using git.

    --
    Salvo Tomaselli

    "Io non mi sento obbligato a credere che lo stesso Dio che ci ha dotato di senso, ragione ed intelletto intendesse che noi ne facessimo a meno."
    -- Galileo Galilei

    https://ltworf.codeberg.page/

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Guillem Jover@21:1/5 to Matthias Urlichs on Wed Jun 26 04:40:01 2024
    On Tue, 2024-06-25 at 07:42:11 +0200, Matthias Urlichs wrote:
    On 25.06.24 01:26, HW42 wrote:
    But you are trusting the Developer system that signs the tag or source package anyway. If compromised it can simply sign malicious code in both cases.

    It's not that easy.

    [ rearranged paragraphs ]

    Hiding compromised code in git is difficult, given that actual people routinely look at commit histories and diffstats and diffs, esp. right between "I create the signed tag" and "I push the t2u tag to Salsa" (we
    could even tell the push script to show the git log by default before doing so).

    How often do people look at merge commits?

    I'm in general not a fan of using merge-based workflows because they
    make the history "dirty" and way harder to review and understand. I do
    use «git show» on merge commits if I want to see what did really change
    there (but that outputs "diff-of-a-diff" by default, which is good to
    detect spurious additions but people were complaining about this
    format for debian/patches/ in git), I might «git diff» the entire branch points (but that can become very tedious with huge changes), but in
    general I simply use «git log -p», so merge commit changes disappear
    from sight. I even had to look up the option to show merge commits
    with «git log -p» (that is --diff-merges), but its output seems pretty terrible in general.

    Using «git merge --no-commit» and then adding anything there (or amending
    it) is trivial, and could easily go unnoticed with a big merge, even more
    when merging a new upstream release for example (depending on the
    packaging workflow). And you'd need to compare what a clean merge would
    become against what the trojaned merge ends up being, which I doubt
    anyone is doing? Perhaps people are checking some other way?

    I created this small example repo:

    https://git.hadrons.org/cgit/wip/git-sneaky.git/
    https://salsa.debian.org/guillem/git-sneaky

    On the web side, if you go into the merge commits, then for this simple
    example the change is visible in both cgit and salsa, but not obvious
    that it was an addition on top of the merge (like with diff-of-a-diff),
    but if you drown it with other changes then it seems it could easily go
    by unnoticed. On the CLI, I doubt (although might be wrong) people
    usually look at them?

    Hiding compromised code in our tarballs is easy. Nobody will ever look at them (ordinarily) and you only need a single shell script running as the developer in question; given inotify it doesn't even show up in "top" while it waits for an opportunity to strike.

    I either use debdiff to compare tarballs, or unpack them and «diff -Naur»
    the two trees, but depending on the magnitude both approaches can indeed
    get unwieldy, just like «git diff». But I probably do this more often
    than checking merge commits. If the tarballs include autogenerated stuff,
    then that makes it easier to inject into.


    But both quoted statements seem a bit reductionist. If tarballs do not
    include autogenerated stuff, then diffing them is pretty easy, and you
    are sure there are no hidden traps behind a merge commit for example.
    The same goes for git with a fast-forward history with no merge
    commits and no autogenerated files. Otherwise ISTM git could also be
    as susceptible or more to trojaning than a tarball with no
    autogenerated stuff within. And by its nature I think git will always
    offer more places to hide stuff than within a bare tarball.

    Thanks,
    Guillem

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Sam Hartman@21:1/5 to All on Wed Jun 26 05:00:01 2024
    "Russ" == Russ Allbery <[email protected]> writes:
    Russ> I worked on an update of my security review last night to take
    Russ> into account the additional concerns that people have raised
    Russ> and other feedback. I wrote a whole bunch of words about this
    Russ> specifically because I don't think it's too obvious to explain
    Russ> at all, and my opinion is more nuanced than simply saying this
    Russ> archive property isn't important. From a security standpoint,
    Russ> I care about attacks and defenses, and care about abstract
    Russ> properties to the extent that they are useful in preventing
    Russ> attacks. Here's what I came up with (this hasn't been
    Russ> published yet; it's still a draft).

    Russ, I have reviewed the additional text in your security review.
    As you are aware, doing this sort of security analysis has been part of
    my professional responsibility for a while. I've also spent a fair bit
    of professional time reviewing security reviews like this including
    analyzing whether they cover the right threats, and whether the
    security analysis is complete and accurate.

    I believe your analysis is good and I support your conclusions.
    I do have one quibble: I think you may have missed one strength of the tag2upload design.

    Russ> ### Source package signatures

    Russ> Currently, the source packages present in the archive include
    Russ> OpenPGP signatures on the `*.dsc` file from the original
    Russ> uploader. For packages uploaded by tag2upload, the `*.dsc`
    Russ> file will instead be signed by the tag2upload service key, and
    Russ> the original uploader, their key fingerprint, and a reference
    Russ> to the original signed Git tag will be added as additional
    Russ> Debian source package control fields in the `*.dsc`
    Russ> file. Understanding the security implications of this change
    Russ> requires some analysis.

    Russ> The source package signature can be used for three purposes:

    Russ> 1. Detect modifications to the source package after it was
    Russ> uploaded. 2. Determine who uploaded this source package.
    Russ> 3. Verify that the source package repesents the intent of the
    Russ> uploader.

    Russ> For the first purpose, the primary protection against archive
    Russ> modifications is the sources list file, signed by the archive
    Russ> key, which contains hashes of all of the source package
    Russ> files. This case is therefore only interesting if the archive
    Russ> processing software or database has been compromised, if the
    Russ> source package is retrieved from the archive without checking
    Russ> its hashes against the sources list, or if the source package
    Russ> is being checked outside of the context of the archive.

    Russ> The implications of a compromise of the archive processing
    Russ> software are discussed above.

    Russ> Verification that the package has not been modified, when
    Russ> outside of the context of the archive, depends on the security
    Russ> of the tag2upload service and its key. This is true of any
    Russ> signed source package outside of the context of the archive:
    Russ> verification that it has not been modified depends entirely on
    Russ> the security of the key that has signed it. However, the
    Russ> tag2upload service and key can be abused to generate far more
    Russ> source packages without arousing suspicion than the typical
    Russ> uploader key, since the tag2upload key is expected to sign a
    Russ> variety of source packages.


    In the case where the tag2upload key has not been compromised, the
    tag2upload service appears to act somewhat as a trusted notary service.
    (So does the sources file that is included in the release signature by
    the archive processing software.)

    Without tag2upload, when verifying the signature of a source package outside of the
    context of the archive (or when the archive's signatures are not
    checked), we depend on the security of the uploader's key.
    If the uploader's key is compromised at any point before we check the
    source package signature, an attacker can create a signature that will
    pass our check but that was not signed by the uploader.

    In contrast, even if an individual uploader key is compromised, if the tag2upload key is secure, we can trust tag2upload's assertions about
    whether a signed git tag was ever turned into a source package that was presented to the archive.
    I think that this might help establish non-repudiation in a manner
    similar to how signed timestamping services establish non-repudiation in CMS-based PKIs.

    In practice, most of the cases where such non-repudiation is valuable,
    the Sources file plus the Release signature from the archive is going to
    be more useful.

    But I think this illustrates the complexity of the security trade
    offs. We do not get a direct cryptographic link from the hash of the dsc
    to a maintainer signature.
    But we do get a security property that I personally think is more
    useful: we get a more trusted attestation than the individual
    maintainer's signature on the dsc plus the maintainer's signature on the
    git tag.
    If we are concerned about the possibility that the tag2upload server
    will have performed an undesired transformation between the git tag and
    the uploaded dsc, we have to check for that.
    But in the far more likely case that the tag2upload transformation and
    key are more trusted than the maintainer key used to sign the git tag,
    we have a form of traceability independent of the archive software.

    -----BEGIN PGP SIGNATURE-----

    iHUEARYIAB0WIQSj2jRwbAdKzGY/4uAsbEw8qDeGdAUCZnuC+AAKCRAsbEw8qDeG dBStAP0bh8N+TrjWC+y8Nfe1QbGHsrC4UMGmzhnE/rhcjb3sVgEA3/dShkVbdH2o JtDZQSML2mIc/cmoh4PgmypFjFVB5g8=
    =xMw3
    -----END PGP SIGNATURE-----

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Simon Richter@21:1/5 to Aigars Mahinovs on Wed Jun 26 06:30:01 2024
    Hi,

    On 6/26/24 03:42, Aigars Mahinovs wrote:

    Do you actually check that the contents of the source *package* (after
    all operations done by dpkg-source and possibly other tools) actually
    match what you were looking at before in your source work tree folder?

    Yes, although more from a quality control perspective, so I don't do it
    for minimal changes or simple "declare different target distribution"
    style backports.

    With the 1.0 format, that was a lot easier (zless on the
    .debian.diff.gz), but with mc that is still doable with 3.0.

    I've quite often found problems like accidentally included files, or inconsistencies in the control file because I forgot to apply a change
    to one package.

    Simon

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Scott Kitterman@21:1/5 to Simon Richter on Wed Jun 26 07:30:01 2024
    On June 26, 2024 4:26:03 AM UTC, Simon Richter <[email protected]> wrote:
    Hi,

    On 6/26/24 03:42, Aigars Mahinovs wrote:

    Do you actually check that the contents of the source *package* (after all operations done by dpkg-source and possibly other tools) actually match what you were looking at before in your source work tree folder?

    Yes, although more from a quality control perspective, so I don't do it for minimal changes or simple "declare different target distribution" style backports.

    With the 1.0 format, that was a lot easier (zless on the .debian.diff.gz), but with mc that is still doable with 3.0.

    I've quite often found problems like accidentally included files, or inconsistencies in the control file because I forgot to apply a change to one package.

    Similarly, I debdiff the source package with the previous revision when doing stable updates to make sure I'm only including the changes I intend to. I do this sometimes, although far less frequently, for Unstable/Experimental uploads. It's not a
    guarantee I'll find everything, but it's not nothing either.

    Scott K

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Matthias Urlichs@21:1/5 to All on Wed Jun 26 11:10:01 2024
    This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --------------IH0ZYQ8oxR3tbth4BWcgGxYk
    Content-Type: multipart/alternative;
    boundary="------------HByc3gnbAcFTvk0sWzeHOdKT"

    --------------HByc3gnbAcFTvk0sWzeHOdKT
    Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64

    T24gMjUuMDYuMjQgMjM6MTQsIFNhbHZvIFRvbWFzZWxsaSB3cm90ZToNCj4gSSB0aGluayB0 aGF0IHRoZSB2ZXJ5IHNhbWUgcGVvcGxlIHdobyBuZXZlciBjaGVjayB3aGF0J3MgaW4gYSB0 YXJiYWxsIGFyZSB2ZXJ5DQo+IHVubGlrZWx5IHRvIHN0YXJ0IGNoZWNraW5nIGRpZmZzLg0K DQpJTUhPIHlvdSdyZSBtaXN0YWtlbi4NCg0KKGEpIGNoZWNraW5nIHRoZSBzb3VyY2UgcGFj a2FnZSBpcyBub3QgYSBvbmUtbGluZXIuIFlvdSBuZWVkIHRvIHVudGFyIHRvIA0Kc29tZXBs YWNlIHRlbXBvcmFyeSwgcnVuIGEgcmVjdXJzaXZlIGRpZmYgKHJlbWVtYmVyaW5nIHRvIG5v dCBza2lwIG5ldyANCmZpbGVzKSwgdGhlbiBjbGVhbiB1cCB0aGUgdGVtcGRpci4NCg0KT24g dGhlIG90aGVyIGhhbmQsICJnaXQgbG9nIC0tcGF0Y2ggdXAuLmRlYiIgaXMgb25lIHNpbXBs ZSBjb21tYW5kOyB5b3UgDQpldmVuIGNhbiBhZGQgYSBzaGVsbCBhbGlhcyBvciBnaXQgYWxp YXMgZm9yIGl0Lg0KDQooYikgcGVvcGxlIChib3RoIHRoZSBtYWludGFpbmVyIGFuZCBvdGhl cnMpIHJvdXRpbmVseSBsb29rIGF0IGdpdCANCmNoYW5nZWxvZ3MsIGluY2x1ZGluZyB3aXRo IC0tcGF0Y2ggb3IgLS1zdGF0Lg0KDQpJIGhhdmUgbm8gaWRlYSBob3cgdW5saWtlbHkgbXkg cGVyc29uYWwgcHJlZmVycmVkIHdvcmtmbG93IGlzLCBiZWluZyBhIA0Kc2FtcGxlIHNpemUg b2Ygb25lLCBidXQgSSBoYXZlIGxpdGVyYWxseSBuZXZlciBleGFtaW5lZCBhIGp1c3QtYXNz ZW1ibGVkIA0Kc291cmNlIHBhY2thZ2UuIE9uIHRoZSBvdGhlciBoYW5kIEkgcnVuIHZhcmlv dXMgImdpdCBsb2ciIGNvbW1hbmRzIA0KaGFiaXR1YWxseSwgYW5kIGJhc2VkIG9uIHRoZSBu b25zZW5zZSBJIGRpZCBmaW5kIG9uIHNldmVyYWwgb2YgdGhvc2UgDQpvY2Nhc2lvbnMgSSBi ZWxpZXZlIEknZCBub3RpY2Ugc3RyYW5nZSBjaGFuZ2VzIHByZXR0eSBzb29uKGlzaCkuDQoN Ci0tIA0KLS0gbWl0IGZyZXVuZGxpY2hlbiBHcsO8w59lbg0KLS0gDQotLSBNYXR0aGlhcyBV cmxpY2hzDQoNCg==
    --------------HByc3gnbAcFTvk0sWzeHOdKT
    Content-Type: text/html; charset=UTF-8
    Content-Transfer-Encoding: quoted-printable

    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
    <div class="moz-cite-prefix">On 25.06.24 23:14, Salvo Tomaselli
    wrote:<br>
    </div>
    <blockquote type="cite" cite="mid:12758375.O9o76ZdvQC@galatea">
    <pre>I think that the very same people who never check what's in a tarball are very
    unlikely to start checking diffs.</pre>
    </blockquote>
    <p>IMHO you're mistaken.</p>
    <p>(a) checking the source package is not a one-liner. You need to
    untar to someplace temporary, run a recursive diff (remembering to
    not skip new files), then clean up the tempdir.</p>
    <p>On the other hand, "git log --patch up..deb" is one simple
    command; you even can add a shell alias or git alias for it.<br>
    </p>
    <p>(b) people (both the maintainer and others) routinely look at git
    changelogs, including with --patch or --stat.</p>
    <p>I have no idea how unlikely my personal preferred workflow is,
    being a sample size of one, but I have literally never examined a
    just-assembled source package. On the other hand I run various
    "git log" commands habitually, and based on the nonsense I did
    find on several of those occasions I believe I'd notice strange
    changes pretty soon(ish).<br>
    </p>
    <pre class="moz-signature" cols="72">--
    -- mit freundlichen Grüßen
    --
    -- Matthias Urlichs</pre>
    </body>
    </html>

    --------------HByc3gnbAcFTvk0sWzeHOdKT--

    --------------IH0ZYQ8oxR3tbth4BWcgGxYk--

    -----BEGIN PGP SIGNATURE-----

    wsF5BAABCAAjFiEEr9eXgvO67AILKKGfcs+OXiW0wpMFAmZ71YUFAwAAAAAACgkQcs+OXiW0wpOj dA//fslI1A19thqAAVZ+Oqmh9BmAMASpBu2NX5L9vsQbIN+vT7QbEEKceogMBY0bHBBmP3jrcaq/ FrcbrFf2NIEit0700DRV3Maayz2RxDkUeLf/USUtcFfBZcfefJwkVwKwQ1T0RYwdS1Y1fFMuWT/F eBi6dRh7INMEhwFXx8+fHYlpMWLheggFD3Tt2V/HwZ/A5BBb5Si0dh63GcLdTeW5rQormz1X5qEf YFSz2kf8/ZcjFr1Oy6fNBvLMPpIhY6Bbk2jbHI0qYiqVLEARSm4VlMjUJugHvpPUZdelQx4RTYD1 45XR/wgoso5LMZ0AMW4246gmg2cKlkP3rkb86BscoXjmBsR/c6dS/5ZxrwIGRk9rR67K8tXB3jK2 gBfO3966rfXOfSC9HaX86jh33X2Rt7D3/FB1VJno+uGxPZnQUKChLBHI6OuUZeFc9CPxvy+eU5hF IVgPS6OGpLql3jKqYWE9Qqo+aLNm0Vzu8L2xMR0QGEJFi1DiIuOVPVGHEL3CL7R6AY59KZ5In5Yi hXo11lhCPVU4bt64UOAS3wJDAEgyoHV1EcmaJY6ztPt+In3noHmqATzTIIE55os7ajtOqQXEvQ9G H5fB3Izsw5CPuijkMjTVC3HIiA1kZjAvbqFt59BD3luTfjoXrnmuP/vn4PVXqyGh+VxaUje7Uz4K 54w=
    =2NJi
    -----END PGP SIGNATURE-----

    --- SoupGate-Win32 v1.05
  • From Didier 'OdyX' Raboud@21:1/5 to All on Wed Jun 26 11:20:01 2024
    Le mardi, 25 juin 2024, 19.14:53 h CEST Russ Allbery a écrit :
    [email protected] writes:
    Watch the Kosovo lightning talk where Didier shows what he did. It is a proven concept.

    If this is the proof of concept where the *.dsc file is encoded in a Git
    tag (sorry, there have been several proofs of concept and I lose track of which person was associated with which one), I understand it and have
    already said why I don't think it will work reliably enough in its current form. (Summary: It relies on the reproducibility of tar and compression programs.) We should measure reproducible source packages by comparing
    the unpacked source packages. It's a lot more robust.

    For the record: I agree with Russ.

    My PoC was written out of the desire to let Salsa CI upload _after successful tests_, and I took the "inline the source package as built locally in a git object" route for that. It inlines the .dsc and the _source.changes. As Russ (and others) have demonstrated, this kind of concept is going to be very fragile and very susceptible to breakage (with origins in varying versions of dpkg, tar, git-archive, pristine-tar, source building workflows, etc etc): in other words, it relies on the reproduciblity of _source packages_, reproducibility of the conversion from a git repository to a source package (which is out of scope of the reproducible builds' team, last I checked).

    It also falls short on its original promise: given that (a modified, inlined version of) the signed source package is pushed to Salsa, the uploader has already vouched for the upload to Debian, even before the "required" tests have ran.

    The workflow I proposed was to delegate the actual upload to a CI job, but it has no additional git-centric or security-centric properties than an uploader pushing a git tag and uploading to DELAYED/1 simultaneously, and then promoting, or cancelling depending on the CI test results (besides a bit less manual work).

    Another caveat with that approach, is that it clearly needs a Debian-specific tool to build the inline data and add it to git (and then another to unpack it and upload). As I wanted something auditable, I inlined text signatures and refused to inline things out of the source tree, but it would be easy to commit the actual signed source binaries to git and get the same process (and effect). But then there's no point in using git, just upload it!

    I think the tag2upload is a much better and stronger approach than my PoC for these reasons:
    - the dgit tools cover way more ground in terms of supported git workflows, to get closer to reproducible source package building from git
    - the PoC's promise to "only upload after successful CI" is nice, and not covered by tag2upload (yet?), but is not really important in the big picture; it's not such a fundamental property for a git workflow that it is worth blocking the tag2upload proposal for. (and it's likely quite simple to get that with tag2upload)
    - tag2upload (especially with multiple, parallel instances of it) would test reproducibility of the git-to-source process that is currently absolutely untested. I totally concur with the impression that almost nobody is actually dissecting source packages (as signed, I really mean the orig tar and .debian.tar files) before upload; as well as the fact that even those doing so are very likely to miss anything unusual in there, making the check mostly useless.

    OdyX

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Sam Hartman@21:1/5 to All on Wed Jun 26 14:20:01 2024
    "Matthias" == Matthias Urlichs <[email protected]> writes:

    Matthias> A reproducibility checker for t2u seems like child's play,
    Matthias> compared to that effort. While no t2u checker currently
    Matthias> exists, somebody might be motivated enough to write
    Matthias> one. (Hint, hint …)

    You don't even need a reproducibility checker; you just need to have a verification checker. I.E. some independent tool that takes the dsc and
    git tag and confirms that the transformations between the two of them
    are acceptable.

    This is I think the security property you actually want, not
    reproducibility.
    Assuming no undesired changes have been introduced into tag2upload, It's reasonably easy to argue that reproducibility gives you this property.
    It is not the only way to approach verification though.

    --=-=-Content-Type: application/pgp-signature; name="signature.asc"

    -----BEGIN PGP SIGNATURE-----

    iHUEARYIAB0WIQSj2jRwbAdKzGY/4uAsbEw8qDeGdAUCZnwHJgAKCRAsbEw8qDeG dCj4AQCKepczwMB/JsZZF5tzN8YxSdpsZNRXlPO0b8KT1JQd0wD9GYfX2ghJU4S7 enIXaprNKF0wel5MknPCH22w9ewasww=GKrj
    -----END PGP SIGNATURE-----

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Soren Stoutner@21:1/5 to All on Thu Jun 27 19:44:03 2024
    Russ,

    I just wanted to say that I have appreciated all of the time and effort you have put into this discussion, and particularly appreciate your explanation of why some security efforts fail and which aspects of security humans are good at compared to which aspects machines are good at.

    On Tuesday, June 25, 2024 12:03:24 PM MST Russ Allbery wrote:
    The basic problem (and this may sound flippant but it isn't) is that DDs
    are humans and humans are so bad at the type of validation that you would want them to perform that there is essentially no chance that this will happen systematically and effectively.

    People, when trying to solve a security problem, will tend towards a
    fairly straightforward approach at first: figure out where the attack happened, figure out how to detect the attack, and then add a new process
    to check for that attack. When another attack is found, add another
    process to detect that attack. And so forth.

    This is a very natural approach, and in some cases it can work, but in the general case what you get is airport security. It has precisely that
    model: planes were hijacked with weapons or blown up with bombs, and therefore we check every passenger's luggage for weapons or bombs. Each
    time we find a new weapon, we add a new check. In this case, we have gone far, far beyond anything that Debian would have the resources to do: we
    hire an army of people whose entire job is to do these checks, we give
    them a bunch of expensive equipment, and we regularly test them to see how well they do at performing this screening.

    In independent tests of TSA screening (the US airport security agency),
    that screening misses 80-95% of weapons or bombs.

    This is a very common cautionary tale in the security community, and it's
    not because the agency is incompetent, or at least any more incompetent
    than any group of fallible humans told to do a boring job over and over
    again will be. This is not a TSA problem, it's a human being problem.

    The assumption on which this security approach is based is not as true as people want it to be. You cannot simply tell people to check something
    and expect them to find problems if those problems are extremely rare and
    99% of the time they will find nothing. The human brain is literally
    hostile to this activity. It is not optimized for it and will not do it reliably. To get the accuracy as high as airport security achieves
    already requires training, testing, and a whole lot of assistance from technology that doesn't get bored or inattentive, and it still fails more often than not.

    You have probably run into a similar version of this problem if you have proofread something that you have written. If you are like most people (there are some people who are an exception to this), you will miss
    obvious, glaring errors that someone else will see immediately because you know what you intended to write and therefore that's what you see. With a great deal of concentration and techniques to override your brain's normal behavior, such as reading all the sentences in reverse order, you can
    improve your accuracy rate, but you will still regularly miss errors.

    Security is even worse because it's adversarial. You're not attempting to spot static bugs that are sitting there waiting to be detected. You are trying to defeat an intelligent, creative, adaptive enemy who watches what you do and adjusts their attack approach to focus on your weak spots. And
    in the case of computer security, *unlike* airport security, catching the attacker once doesn't let you arrest them and prevent them from ever attacking you again. The attacker can just try again, and again, and
    again until they succeed.

    This doesn't mean that spot checks are useless. Doing an occasional
    manual check can catch unanticipated problems and snare a lot of
    attackers, and it's part of a good overall security strategy. But this approach isn't *reliable* and shouldn't be the front line of the strategy.

    This problem is one of the reasons why there is so much emphasis in
    computer security at looking at the whole system, including the humans involved, and anticipating how the humans will fail. Humans are
    vulnerable to boredom, to inattentiveness, to alert fatigue, to seeing
    what they expect to see, to laziness and haste, to emotional manipulation, and any number of other factors that interfere with them following
    processes. The security design has to account for this.

    Some processes are worse than others. Processes that require a human to check something for errors that will not be present 99% of the time, and where it is overwhelmingly likely that no one will ever know if the human
    did the check properly or not, is nearly a worst-case scenario. The check just won't happen reliably, no matter the intentions of everyone involved. People will skip it "just this time." People will open the thing they're supposed to look at and their eyes will point at the screen but their
    brain will not actually analyze anything they're looking at because it doesn't believe it will find anything.

    Systems that need better humans won't work reliably. You can say that
    it's a moral obligation and make people feel guilty for not following the system properly, but this still doesn't get you reliable performance, only
    a bunch of stressed, guilty people who are now demotivated on top of all
    the problems that you already had.

    This is why good security design is all about having humans do the things that they're good at or at least okay at (patch review, for example, which can still be tedious but which is substantially more novel and interesting than reviewing source packages that will be exactly what you expect nearly every time), and not relying on humans to do the things they're bad at.
    This is the whole philosophy behind reproducible builds: don't make humans tediously compare things, set up mechanisms so that computers can compare things. Computers don't get bored or inattentive or tired and do not care
    in the slightest about doing exactly the same thing millions of times to
    get only one anomalous result.

    This is also why even for the case of finding bugs in source packages,
    which is much less of a worst-case scenario than finding maliciously
    injected code that is trying to hide, "test the package before you upload
    it" is only a fallback strategy when you don't have anything better. A
    much better strategy is to encode the tests that you would perform as programs and make the computer run them. This is why we write test suites and autopkgtests: then all the tests happen with every upload and the computer finds problems and no human has to try to force themselves (and likely fail) to perform the same tedious steps over and over again.

    One final philosophical note: humans also have incredibly limited energy. This is particularly a problem in a volunteer project, as you noted in
    your footnote. There is way more to do than we have resources to do. I
    want to use that energy as wisely as possible. That means I
    *particularly* do not want that energy to go into doing things that humans are bad at and that probably won't be done well anyway. This means
    designing the whole upload system so that we can create mechanisms like reproducible binary builds, reproducible source builds, autopkgtests, and other ways to move the load onto computers and off of humans and save that precious human attention for the things that only humans can do.


    --
    Soren Stoutner
    [email protected]
    -----BEGIN PGP SIGNATURE-----

    iQIzBAABCgAdFiEEJKVN2yNUZnlcqOI+wufLJ66wtgMFAmZ+I3MACgkQwufLJ66w tgPKWxAAldRD86izPbA7nFCf7zNkC9RX4s2VHWUqLaod7YlD0MZOq9h1m/tRKoan x4ibDYTDImFK5o14HTqwgOwD95Jkdel6K7SrY6GI287s1vCx82YR8AiYy1nBHnSz s/8ghSey5dTkzDzZPLvWB8dtLzKsOCRNux5a5fY69V5+U4F6DuiuCRSh7gLapg/G Pt3/DFDrMQPP3ntZHxchPbg1HoYTIT+/Tuib/YFT87lFiXS4LF9GxB/YFBgW1uaF VwnGw7/pYPcIzixqpL3rQiRqMn2STEtkk2yYANWD7XBMIebeuCfOlOceDASI2G1/ /sJtQbmRlDs7leAInLoHo+mGmafMNjXn7E1SHWQZQbdZnVnAU8noyvnv4r3b0knh PpX8ru1WpHKdvfI0NvDg8t5WerWxzk7OD4RgWxLwn1oabdaHTtIuG1TWLzSOi8rK P9aTr2XUNW48sVLmfNI0AA0BAzI8rUBawYVthMMueRYg0JlCZPylJeZhEl/Hsrwg /qQsszMQv0elwPMDf/HguXFIOIAemjM61Bt86L5OAWHt3eC75B6PH5+9cffEsl/b RrdP0exA0dTmrtflGjOHRf/IJzpDXGJppxevumXQLdyOpuIdtGJaNcrzHPPi0aoe 0bXVYBbswGVWOdPzyQsdj5HBmpkp6Hv1GyvdyJcu1GFPyoXJxeQ=
    =w4z9
    -----END PGP SIGNATURE-----

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Salvo Tomaselli@21:1/5 to All on Fri Jun 28 07:40:01 2024
    (a) checking the source package is not a one-liner. You need to untar to someplace temporary, run a recursive diff (remembering to not skip new files), then clean up the tempdir.

    And yet it can be faster to do this than to run git clone. Let alone figuring out how the stuff is tagged, and compare the tags I'm interested in.



    --
    Salvo Tomaselli

    "Io non mi sento obbligato a credere che lo stesso Dio che ci ha dotato di senso, ragione ed intelletto intendesse che noi ne facessimo a meno."
    -- Galileo Galilei

    https://ltworf.codeberg.page/

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)