On Wed, 9 Nov 2022, Diogo Sant'Anna wrote:
Hi,
I think your last response didn't reach the curl-library list as you weren't
subscribed yet. I will therefore include more of your response in the quotes
below so that readers can still see what was written.
Well I'm happy you tried on Scorecards, I appreciate the trust! It's
unfortunate that the action was not helpful for you, but your
detailed feedbacks are already of huge value for us and I'll get all of
them to the OpenSSF team.
I want to be clear and say that I'm not dissing the tool nor the idea, I just
don't think it is very helpful *to us*.
I would like to use this reply to complement our discussion about
pinned-dependencies and get some details to try to understand why some
checks did not work properly on your repo, so that we can possibly work to
enhance the tool.
1 - "Code-Review High"
I think this check did not get a good result because the last commits were
not merged through PRs, as I could see in this example
<https://github.com/curl/curl/pull/9691>, and the Scorecards is yet not able
to verify reviews like this. In order to give a more complete feedback and
reason to add this feature, could you explain to me how the review process
works (or send me a link)?
We never click the merge button in the GitHub UI, we always merge
pull-requests "manually" using git. This allows us to make sure the commit
messages are exactly the way we want them and is a much easier/faster way to
squash/cleanup commits etc before merge.
We only fairly infrequently add a "Reviewed-by:" line in the commit message,
most commits are actually done without recording any review details. Most (but
far from all) commits are still reviewed by someone else than its author. I
think primarily my commits are at times not reviewed by anyone else.
2 - "Token-Permissions High"
I think there was a misunderstanding because of the name of the check. The
check is not verifying if you set up a token for the job, it looks for the
permissions given to the GITHUB_TOKEN that's automatically generated for
your workflows, so those permissions turns out to be called
"token-permissions" >< . Please forgive me if I understood incorrectly, but
this confusion makes perfect sense to me and I'm already sending this as
feedback to the Scorecards team.
In any case, the "token-permissions" check verifies if the top-level
permissions are set to read-only, following the principle of least
privilege. Those permissions are related to our discussion about
pinned-dependencies, so I'll join these subjects on the 4th point.
Thanks, I went back and read the descriptions again and the linked-to github
documentation and I think I'm starting to understand what you are talking
about.
I now understand that you point out that the github workflows as they are
setup right now for curl allow the jobs to write contents back into the git
repo as hosted on github?
If so, then we really need to stop that. It was however not immediately clear
to me exactly what we want the permissions to be set to. Is 'read-all' too
restrictive ?
3 - "Dependency-Update-Tool High"
Could you tell which dependency-update-tool the project is currently using?
I can raise an issue to ask for its support.
We don't have depdencies like that so there is no such tool. You build curl to
use the dependencies that are installed in the machine where curl is
built/run. We cannot scan for those on GitHub.
4 - "Pinned-Dependencies Medium"
So, the thing is that, depending on the workflow permissions, an external
GitHub Action actually could modify your code. Take a look at this action
<https://github.com/marketplace/actions/add-commit>, for example; it's an
action created for the purpose of committing into the code of whoever calls
it. Of course this one is intended to be used for good and is trustworthy,
but if a potential malicious user compromises the spell-checker, for
example, he could try similar things and modify your code.
Against this kind of threat, two solutions can be applied (ideally both of
them):
1. Limit the privileges of the workflows, setting them as read-only or
giving only the permissions they need. If no privilege is explicitly set on
the workflow, the default one is used. If you have not changed the default
privilege on your GitHub settings (I can not evaluate that, as this setting
is not public), the default is write-all, which can be dangerous. Adding
these explicit workflow permissions correspond to the "Token-Permissions"
check on Scorecards.
2. Pin the dependencies to specific and unmodifiable versions of the job.
This would mean hash-pinning the dependencies, as even when referring by
version (as @vX.Y.Z), the version can be modified to point to different
code. The downside of this solution is that the job would not be updated
automatically, but some dependency-updates tools(such as dependabot and
renovatebot) are already able to suggest updates on this scenario.
Is read-all what we want?
BTW, in the settings/actions section for the curl/curl repo under the
"Workflow persmissions" title I have selected "Read respository contents
persmission" which is described as: "Workflows have read permissions in the
repository for the contents scope only."
As opposed to the other alternative which says "Workflows have read and write
permissions in the repository for all scopes"
*read permissions* vs *read and write permissions*. If that doesn't restrict
the workflows from writing content, then what does this option mean?
--
/ daniel.haxx.se
| Commercial curl support up to 24x7 is available!
| Private help, bug fixes, support, ports, new features
| https://curl.se/support.html
--
Unsubscribe: https://lists.haxx.se/listinfo/curl-library
Etiquette: https://curl.se/mail/etiquette.html