Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add immutable action check #2496

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open

Conversation

sailikhith-stepsecurity
Copy link
Collaborator

No description provided.

step-security-bot

This comment was marked as duplicate.

step-security-bot

This comment was marked as duplicate.

Copy link
Contributor

@step-security-bot step-security-bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please find StepSecurity AI-CodeWise code comments below.

Code Comments

knowledge-base/actions/homebrew/actions/remove-disabled-formulae/action-security.yml

  • [High]Use a version control system that prevents merging of code without passing a test phase
    The git patch in the provided unified diff format does not seem to include any tests that ensure the code is functional and correct. All code that gets merged should pass a series of tests before it is merged into the main branch. Implement a continuous integration system or hook in a unit test suite that ensures tests pass before allowing code to be merged into the main branch.
  • [Medium]Avoid the use of commented-out code
    The provided git patch includes commented-out code. Commented-out code is not a productive form of version control. In general, it is better to remove code that is not being used as it can lead to confusion and unnecessarily increases the size of a codebase. Remove all commented-out code from the provided git patch.
  • [Medium]Use valid branch names
    The provided git patch includes a local branch with the name "disabled-formulae." Branch names should avoid using spaces or other potentially problematic characters. Rename the branch to remove the space.
  • [Low]Use clear and descriptive commit messages
    The provided git patch includes a commit message that does not convey much information. Write a clear and descriptive commit message that explains the change being made in the commit.

knowledge-base/actions/homebrew/actions/remove-disabled-packages/action-security.yml

{
"recommendations": [
{
"Severity": "High",
"Recommendation": "Remove unused import of os",
"Description": "The os module is not being used in the file, which means that it is an unused import.",
"Remediation": "Remove the line with the import statement for os."
},
{
"Severity": "Low",
"Recommendation": "Add a newline at the end of the file",
"Description": "The file does not have a newline at the end of the file, which can cause issues with some tools.",
"Remediation": "Add a newline character at the end of the file."
}
]
}

remediation/workflow/metadata/actionmetadata_test.go

  • [High]Input Validation
    The function 'doesActionRepoExist' assumes that the input 'filePath' is a valid path. However, there is no validation of 'filePath' input. This may lead to directory traversal attacks by passing a relative path or a filesystem path that could interrupt the normal application execution. Validate the input for 'filePath' thoroughly and provide an error message to the user if the input is not in the correct format. This can be achieved by using a secure coding practice like 'whitelist validation' or a third-party package like 'filepath.Abs.'
  • [Low]Error Handling
    The function 'doesActionRepoExist' returns 'false' when an error occurs, but fails to log an error message or provide any additional information, making it difficult to debug errors when they occur. In production, this lack of error-handling could result in silent failures which could persist undetected and cause issues with data integrity or system availability. Provide detailed error messages and logs using the provided logger package to indicate what went wrong and where in the code the error occurred. Use 'log.Error' to log errors in logs.

remediation/workflow/pin/action_image_manifest.go

  • [High]Don't Error Hidden [errcheck]
    Errors should be returned or handled without being hidden. Replace the logrus.Error statements with return nil, err statements to return the error instead of just logging it or add handling logic.
  • [High]Use a Templating Engine to Construct Database Queries, Keys, and Commands [GOW100]
    Constructing a query using string concatenation is not a recommended way to build queries. When injecting data into a string these values may contain special characters and SQL syntax that causing the query to behave in unexpected ways. Update the code to use a query library like go-template or prepared statements instead of string concatenation.
  • [Medium]Avoid Using Global Variables [G101]
    Use of global variables can lead to race conditions and unintended results if not managed properly. It also makes it difficult to reuse and test code. Avoid the use of global variables and instead use dependency injection or other methods for sharing variables between functions and packages.
  • [Medium]Avoid nil Channels [G104]
    Attempting to write to a nil channel causes deadlock and can therefore impact system stability. Check that channel has been initialized before use and don't use closed channels.
  • [Low]Don't Use defer in Loops [G318]
    Defer statements in loops can lead to resource starvation and slow performance. Ensure that any defer statements in loops are only run once per loop iteration by moving the defer outside of the loop or by using a Func() {} hack to ensure closure variables are declared inside a function scope.
  • [Low]Use Synchronized Functions with Mutexes for Shared Resources [G304]
    Without synchronization, multiple threads can simultaneously access the same resources causing race conditions and/or deadlocks. Use a sync.Mutex{} instance for any variables or resources that are shared across multiple functions or threads to ensure data integrity is properly enforced.

remediation/workflow/pin/action_image_manifest_test.go

  • [High]Avoid using test functions as package exportables
    Test functions should be internal to the package and not exported as a package symbol. Change the function signature of Test_isImmutableAction to test_isImmutableAction so that it is not exported as a symbol. Then update the references to the function name within the test case.
  • [Medium]Handle invalid action input as error
    The handling of an invalid input action is returning false. Return an error instead to ensure calling code can differentiate between valid and invalid input. Within the function IsImmutableAction, handle the invalid scenario and return as an error instead of a boolean. The calling code will then need up update to handle this error.
  • [Medium]Handle action existence validation as error
    The handling of an action that does not exist is returning false. Return an error instead to ensure calling code can differentiate between a legitimate action that doesn't exist and an invalid input. Within the function IsImmutableAction, handle the missing-action scenario and return as an error instead of a boolean. The calling code will then need up update to handle this error.

remediation/workflow/pin/pinactions.go

  • [High]Avoid executing immutable code
    The current code execution allows execution of immutable code. Disallow execution of immutable code by adding a check against immutable actions.
  • [High]Sanitize user input
    The inputYaml parameter is not sanitized, leaving it open to attacks such as command injection. Sanitize the input before passing it into the function by validating and filtering out any invalid characters
  • [Medium]Follow naming conventions for functions in Go
    The function name 'PinAction' does not follow the naming conventions for functions in Go. Rename the function to 'pinAction'.
  • [Medium]Validate input parameters
    The function does not validate its parameters. Validate the parameters of the function by checking that they are not nil or empty before using them.
  • [Low]Avoid using hard-coded values
    The function uses a hard-coded value, making it less maintainable. Use a named constant instead of a hard-coded value for the return value of the function.

Feedback

We appreciate your feedback in helping us improve the service! To provide feedback, please use emojis on this comment. If you find the comments helpful, give them a 👍. If they aren't useful, kindly express that with a 👎. If you have questions or detailed feedback, please create n GitHub issue in StepSecurity/AI-CodeWise.

Copy link

codecov bot commented Jan 16, 2025

Codecov Report

Attention: Patch coverage is 93.61702% with 3 lines in your changes missing coverage. Please review.

Project coverage is 65.54%. Comparing base (d61982f) to head (837f1d1).
Report is 5 commits behind head on main.

Files with missing lines Patch % Lines
remediation/workflow/pin/action_image_manifest.go 93.47% 2 Missing and 1 partial ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #2496      +/-   ##
==========================================
- Coverage   67.34%   65.54%   -1.80%     
==========================================
  Files          16       17       +1     
  Lines        1283     1750     +467     
==========================================
+ Hits          864     1147     +283     
- Misses        332      515     +183     
- Partials       87       88       +1     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

homebrew/actions/remove-disabled-formulae is replaced by remove-disabled-packages.( REF - Homebrew/actions#567. )
which is causing our test workflow to fail here - https://github.com/step-security/secure-repo/actions/runs/12809184736/job/35713468641.

So, updating our kb.

step-security-bot

This comment was marked as duplicate.

want bool
}{
{
name: "immutable action - 1",
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we have mocked responses from APIs for unit tests. is it possible to do that?

@@ -43,7 +43,7 @@ func PinAction(action, inputYaml string) (string, bool) {
return inputYaml, updated // Cannot pin local actions and docker actions
}

if isAbsolute(action) {
if isAbsolute(action) || IsImmutableAction(action) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if it is an immutable action, we might need to still pin it. e.g. if it is @v1 it should be pinned to the semantic tag that corresponds to v1, e.g. v1.2.3. if it is an immutable action and already in semantic version, then we can ignore it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants