Skip to content

Missing data flow #10980

@LFYSec

Description

@LFYSec

I use the following rule of TaintTracking to query the data flow from CONTEXT_THREAD_LOCAL to if(user), but it doesn't work.

It seems that there is no data flow from CONTEXT_THREAD_LOCAL to User user variable?

override predicate isSource(DataFlow::Node source) {
    exists(FieldRead f | source.asExpr() = f | 
        not source.asExpr().getEnclosingStmt() instanceof IfStmt and
        f.getField().isStatic()
    )
}

override predicate isSink(DataFlow::Node sink) {
    exists(IfStmt ret |
        sink.asExpr() = ret.getCondition().getAChildExpr*()
    )
}
@SuppressWarnings("resource")
public static User getCurrentUser() {
    return CONTEXT_THREAD_LOCAL.get().user;
}

public static User getRequiredCurrentUser() {
    User user = getCurrentUser();
    if (user == null) {
        throw new ApiException(ApiError.AUTH_SIGNIN_REQUIRED, null, "Need signin first.");
    }
    return user;
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    questionFurther information is requested

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions